模块
- 在Python中,一个.py文件就成为一个模块(Module)。
- 为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。
- 每一个包目录下面都会有一个
__init__.py
的文件,这个文件时必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py
可以说空文件,也可以有Python代码,因为__init__.py
本身就是一个模块,而它的模块名就是对应的目录名称。
使用模块
hello.py
#!/usr/bin/env python3 # -*- coding: utf-8 -*- ' a test module ' __author__ = 'Michael Liao' import sys def test(): args = sys.argv if len(args) == 1: print('Hello, world!') elif len(args) == 2: print('Hello, %s!' % args[1]) else: print('Too many arguments!') if __name__ == '__main__': test()
- 第1行和第2行数标准注释。
- 第1行注释可以让这个hello.py文件直接在Unix/Linux/Mac上运行,第2行注释表示.py文件本身使用标准UTF-8编码。
- 第4行数一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释。
- 第6行使用
__author__
变量把作者写进去。 - sys.argv,用list存储了命令行的所有参数。argv至少有一个元素,因为第一个参数永远是该.py文件的名称。
- 当我们在命令行运行hello模块文件时,Python解释器把一个特殊变量
__name__
置为__main__
,而如果在其他地方导入该hello模块时,if判断将失败,因此,这种if测试可以让一个模块通过命令行运行时执行一些额外的代码,最常见的就是运行测试。
作用域
- 正常的函数和变量名是公开的(public)。
__xxx__
是特殊变量,可以被直接饮用,有特殊用途。如_author_
,__name__
,__doc__
。_xxx
和__xxx
这样的函数或变量就是非公开的(private),不应该被直接引用。
安装第三方模块
- pip、pip3。
- pip install xxx
- 模块搜索路径
<<< import sys <<< sys.path <<< sys.path.append('/Users/padluo')
- 添加自己的搜索目录,一声直接修改
sys.path
,添加要搜索的目录,这种方法是运行时修改,运行结束后失效。第二种是设置环境变量PYTHONPATH
,该环境变量的内容会被自动添加到模块搜索路径中,只需要添加自己的搜索路径,Python自己本身的搜索路径不受影响。