对import的理解,python中的package和module概念

2,172 阅读2分钟

module就是一个.py文件,自己写的一个.py文件也可以作为一个module被别的程序使用。

module中的任何一个对象(即函数function,类class,变量variable等)都可以被导入使用。

import的常见使用

直接使用import

  • 格式: import module
import module1

# 定义三个变量来指向module1里面的对象
func = module1.function_in_module1
cls = module1.Class_in_module1()
vr = module1.variable_in_module1

# 打印出来看看效果
print('-' * 60)  # 打印个分割线
func()
print('-' * 60)
print(cls)
print('-' * 60)
print(vr)

运行后输出

------------------------------------------------------------
I'm a function in module 1
------------------------------------------------------------
I'm a class in module 1
------------------------------------------------------------
I'm a Variable_in_module 1

from 模块 import 对象(函数,类,变量等等)

## 函数
from module1 import function_in_module1

function_in_module1()

运行后输出

I'm a function in module 1

## 类
from module1 import Class_in_module1

a = Class_in_module1()
print(a)

运行后输出

I'm a class in module 1

## 变量
from module1 import variable_in_module1

a = variable_in_module1
print(a)

运行后输出

I'm a Variable_in_module 1

from 包(package).模块(module) import 对象(object)

在python中可以通过构建包(package)来组织很多.py文件模块

构建的方法就是在放有.py文件的文件夹下,创建__init__.py的文件,文件内容可以为空。

这样,这个文件夹在python眼里就变成了一个包。这个包的名字就是这个文件夹的名字。

在下面的测试中,我构建的包的结构是:

package
|
|-- __init__.py
|
|-- module2.py
|
|-- subpackage1
|
|---- __init__.py
|
|---- module1.py
|
|-- subpackage2
|
|---- __init__.py
|
|---- module_in_subpackage2.py

# 比如
from package.module2 import func

func()

运行后输出

imported successfully

# 来个超级长的
# from package.subpackage.module import object
from package.subpackage2.module_in_subpackge2 import a_variable

print(a_variable)

运行后输出

I'm a variable in subpackage2's module

from 包(package) import 模块(module)

from package.subpackage2 import module_in_subpackge2

a = module_in_subpackge2.a_variable
print(a)

运行后输出

I'm a variable in subpackage2's module

from package import subpackage

可以导入,但是导入的并不是__init__.py里面的东西,而是包里包含的模块

from package import subpackage2

print(subpackage2.module_in_subpackge2.a_variable)

运行后输出

I'm a variable in subpackage2's module

用 as 给导进来的东西起个好写的别名

from package.subpackage2 import module_in_subpackge2 as haha

a = haha.a_variable  # 注意看这
print(a)

运行后输出

I'm a variable in subpackage2's module

总结一哈

就是大包(package)可以组织一群小包(subpackages),小包可以组织小小包,包里不仅可以有包还可以有模块(module)。

其实包就是装有__init__.py的文件夹,模块就是一个.py文件,我们最终的目的就是用import导入进来使用它内部的对象(函数,类,变量等等)

小笔记,今天好好理了一下这个思路。建议不太会的同学可以去https://github.com/Edwardlin-zlt/Notebook/tree/master/%E5%AF%B9import%E7%9A%84%E7%9B%B8%E5%85%B3%E7%90%86%E8%A7%A3下载我构造的包,跟着我的代码在jupyter上敲一敲,应该就能懂了吧。

我就是个自学python的新手,求大神带路。如果有理解错误的地方请指出~