module(模块)
python的每个文件就是一个模块
导入模块,可以是py源码也可以是pyd库。引入模块语句如下
import module1[,module2[,...moduleN]]
模块导入指定的部分到当前的命名空间,或从一个包里面导入某一个模块
from modname import name1[,name2[,...nameN]]
其中第一种导入方式在使用模块内的函数时需要写出modname.funcname
,第二种导入方式直接写函数名或变量名,不需要在前面加模块名
导入模块代码
import packet.mod1
import packet.dir1.mod1
from mod1 import *
packet(包)
一个包含一个__init__.py
文件的目录,import
时会调用一次进行初始化。
__all__
from pack import *
并不会导入所有模块,而是会将__all__
变量里的模块全部导入,所以我们可以在__init__.py
文件中配置__all__
变量
__all__ = ["video","audio"]
__name__
python中的模块就是一个普通文件,不像C++里面有lib、dll的调用。这个文件可能被直接调用,为了判断代码是被模块加载还是直接执行的主模块,可以使用__name__
来获取当前模块名称
if __name__ == '__main__'
模块的导入路径
python是如何寻找导入模块的目录呢?
在python中提供了sys
模块,sys.path
列表提供了查找模块的路径。如果一个库在多个目录中都有,会按列表的次序来查找。如果我们想自己建一个目录,让python来这个目录查找模块,可以用如下方式
sys.path.insert(0,"../")
0
表示插入位置,../
当前路径的上一层路径。
包的导入
如果我们有一个mypack包,包里面有audio、video和opengl三个模块,
# 需要加上包和模块的名称
import mypack.video
mypack.video.view()
# 引入包的命名空间,不用加包名称
from mypack import audio
audio.play()
# 引入包和模块的命名空间
from mypack.audio import play
play()
# 不导入mypack包里的所有模块,只导入__init__.py文件里所有的函数和成员
from mypack import *
mypack.opengl.draw() # 调入失败,模块未导入
为了使from mypack import *
能导入opengl,__init__.py文件可编写如下
__init__.py
__all__ = ["audio","video","opengl"]
def init():
print("mapack init function")
包里面还可以包含子包,这里不再赘述