module(模块)

python的每个文件就是一个模块

导入模块,可以是py源码也可以是pyd库。引入模块语句如下

import module1[,module2[,...moduleN]]

REF:py、pyc、pyo、pyd文件区别

模块导入指定的部分到当前的命名空间,或从一个包里面导入某一个模块

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")

包里面还可以包含子包,这里不再赘述

© liangqi all right reserved,powered by Gitbook文件修订时间: 2019-05-22

results matching ""

    No results matching ""