Python学习(六)--模块
一、模块
任何的Python程序都可以作为模块导入,可以简单的把一个文件理解成一个模块,那么文件名就是模块名称。比如hello.py这个文件的模块名就是hello,通过import hello可以把这个模块导入。
二、运用__name__
在导入模块的时候,其中的代码就会被执行。不过不希望导入模块的时候运行代码,可以使用__name__变量。
对于如下的代码,在import hello模块时就会执行hello函数。
- #hello.py - def hello(): - print 'Hello, world!" - hello()
那么我们就需要告知模块本身是作为程序运行还是导入到其它程序中。在主程序中,变量__name__的值是‘__main__',而在导入模块中,这个值就是模块的名字hello。因此,我们可以做如下修改:
- #hello.py - def hello(): - print 'Hello, world!" - def test(): - hello() - if __name__ == '__main__': - test()
修改完后,再次导入模块时,就不会去运行程序了。
三、包
包就是模块所在的目录,为了让Python将其作为包对待,它必须包含一个命名为__init__.py的文件。
常见的导入方式:
from package import item
item可以是package的子模块或者子包,或者其它定义在包中的名字(比如一个函数、类或者变量)
import item.subitem.subsubitem
最后一个item之前的item必须是包,最后一个item可以是一个模块或者包,但不是能是类、函数和变量
举例:
文件目录结构如下:
- /drawing/
-
- /__init__.py
- /colors.py
- /shapes.py
- #导入包,只有__init__.py中的内容可用,其它模块不可用 - import drawing - #colors模块可用,但是只能通过全名drawing.colors使用 - import drawing.colors - #shapes模块可用, 可以通过短名shapes使用 - from drawing import shapes
四、导入模块示例
python在import module的时候 是按照以下顺序去import一个module的: 1. 首先判断这个module是不是built-in即内建模块,如果是则引入内建模块,如果不是则在一个称为sys.path的list中寻找。2. sys.path在python脚本执行时动态生成,包括以下3个部分:a.脚本执行的位置,即当前路径;b.环境变量中的PYTHONPATH, 即.bash_profile;c.安装python时的依赖位置。
4.1 平级导入
- a/test1.py
- a/test2.py
对于如上的目录结构,在test2.py中引用test1.py中的内容:import test1 或者 from test1 import *
4.2 子目录下
- a/__init__.py
- a/test1.py
- a/test2.py
- test.py
在test.py中引用a的一些模块,可以在a目录下新建__init__.py空文件,这样就a目录变成了一个包:import a.test1
4.3 不同目录下
- a/main/main.py
- a/b/__init.py
- a/b/test1.py
main.py想要引用b下面的内容:1.导入sys模块;2.通过sys.path.append(path)函数来导入自定义模块所在的目录;3.导入自定义模块。
import sys sys.path.append(r"d:\test\a") import b