5 模块
在Python中,一个.py文件就称为一个模块(Module)。我们在编写程序时,经常使用Python内置的模块和第三方模块。
为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。当引入包名.模块名后就可以使用该模块了,不同包中的模块名称可以不用考虑是否重复。
请注意:每一个包目录下,都会有一个_init_.py
的文件,这个文件是必须存在的。否则,Python就把这个目录当成普通目录,而不是一个包。
init.py可以是空文件,也可以包含代码,本身它就是一个模块。模块名就是对应的包名。
在自定义模块时,命名要注意,避免与内置的模块名冲突。
5.1使用模块
举例:使用Python内建的sys模块
1 #!/usr/bin/env python3
2 # _*_coding:utf-8 _*_
3
4 'test module'
5
6 __author__ = 'Zhu Shidong'
7
8 import sys
9
10 def test():
11 '测试模块'
12 args = sys.argv
13 if len(args) == 1:
14 print('Hello,World!')
15 elif len(args) == 2:
16 print('hello,%s!' % args[1])
17 else:
18 print('Too many param!')
19
20 if __name__ == '__main__':
21 test()
代码分析:
第1行:标准注释,该注释可以让次模块在Linux/Unix/Mac上直接运行。
第2行:标准注释,表示该文件使用标准utf-8编码
第4行:模块的文档注释。任何模块代码的第一行注释都被认为是模块的文档注释。
第6行:使用__author__
将作者写入进去
以上是python的标准模板
第8行:引入sys模块。sys有一个argv变量,用list存储了命令行的所有参数。argv至少有一个元素,因为第一个参数永远是该.py文件的名称。例如:
运行python3 hello.py获得的sys.argv就是[‘hello.py’]
运行 python3 hello.py Michael获得的sys.argv就是[‘hello.py’, ‘Michael]。
第20-21行:当我们在命令行直接运行hello模块时,PYthon解释器把一个特殊变量__name__
内置为__main__
,而如果在其他地方导入该hello模块时,if
判断将失败,因此,这种if
测试可以让一个模块通过命令运行时执行一些额外的代码,最常见的就是运行测试。
- 作用域
变量分为正常变量和特殊变量
公开变量:
1 正常变量:是公开的(public),可以被直接引用,比如:abc
、x123
等
2 特殊变量:类似__name__
、__author__
,可以被直接调用。
非公开变量:类似_xxx
、__xxx
这样的函数或变量是非公开的(private),不应该被直接引用,而不是不能被直接引用,是因为Python并没有一种方法可以完全限制访问权限,但是从习惯上不应该引用private函数或变量
5.2安装第三方模块
在Python中,我们可以通过包管理工具pip完成第三方模块的安装。
注意:Mac和linux中有可能python3.x和python2.x并存,因此对应的pip命令是pip3
举例第三方库-Python Imaging Library(PIL)是Python强大的图像处理库。
一般来说,第三方库都会在Python官方的pypi.python.org网站注册,需要安装一个第三方库,必须知道库的名字,可以在官网或者pypi上搜索。
其他常用的库:
1. Mysql驱动:mysql-connector-python库
2. 用于科学计算的库:NumPy
3. 用于生成文本的模板工具:Jinja2
- 模块搜索路径
当试图加载一个模块时,Python会在制定目录下搜索对应的.py文件,默认情况下Python解释器会搜索当前目录,所有已安装的内置模块和第三方模块。搜索路径存放在sys.path变量中。
如果我们要修改搜索路径,两种方法:
- 直接修改sys.path,添加要搜索的目录
- 设置环境变量:PYTHONPATH