Python公开课 - 详解模块
前言
模块是一个包含所有你定义的函数和变量的文件,可以被别的程序引入,以使用该模块中的函数等功能。
现在流行的模块化设计也是这个概念,一个项目经过模块化设计后,模块接口需要做标准化处理,这样可以方便在其他项目中进行复用,提高开发效率。
制作一个模块
我们可以编辑一个module.py
文件
def my_print(info):
print("module: %s" %info)
保存后,我们就可以在其他的文件中引用并使用其中的函数功能了
>>>import module
>>>module.my_print('hello world')
输出:
module: hello world
一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。
模块的路径
当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?
这就涉及到Python的搜索路径,搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。
>>> import sys
>>> sys.path
['', '/usr/lib/python35.zip', '/usr/lib/python3.5', '/usr/lib/python3.5/plat-x86_64-linux-gnu', '/usr/lib/python3.5/lib-dynload', '/usr/local/lib/python3.5/dist-packages', '/usr/lib/python3/dist-packages']
我们可以通过sys.path.append()
来添加指定的目录
包 - Package
在大多数情况,会选择以目录的方式来整理模块文件,例如创建一个test
目录,并将module.py移动到该目录下,如果这时候直接使用my_print
函数就会发现失败了,原因是找不到该目录
from test import module
module.my_print("hello world")
输出:
Traceback (most recent call last):
File "test.py", line 1, in <module>
from test import module
File "/home/ubuntu/learn/test.py", line 1, in <module>
from test import module
ImportError: cannot import name 'module'
这时候就算我们通过sys.path.append('test')
也不行,
那么该怎么办呢,这时候需要在test
目录下创建一个__init__.py
文件就可以了
__init__.py的作用
含有__init__.py文件的目录会被Python解释器作为Package来对待。
我们在导入一个包时,实际上是导入了它的__init__.py文件。这样我们可以在__init__.py文件中批量导入我们所需要的模块,而不再需要一个一个的导入。
相关阅读
展开剩余53%