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),可以被直接引用,比如:abcx123
    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变量中。
    如果我们要修改搜索路径,两种方法:
  1. 直接修改sys.path,添加要搜索的目录
  2. 设置环境变量:PYTHONPATH