参考资料Python教程 - 廖雪峰的官方网站 (liaoxuefeng.com)
五、模块(Module)
- 使用模块
-
模块
-
为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块。
-
模块是一组Python代码的集合,可以使用其他模块,也可以被其他模块使用。
-
使用模块有什么好处?
- 提高了代码的可维护性
- 编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。
- 可以避免函数名和变量名冲突
-
为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。
- 每一个包目录下面都会有一个
__init__.py
的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录,而不是一个包。__init__.py
可以是空文件,也可以有Python代码,因为__init__.py
本身就是一个模块,而它的模块名就是包名。
- 每一个包目录下面都会有一个
-
创建模块注意:
-
❗命名不能和Python自带的模块名称冲突。例如,系统自带了sys模块,自己的模块就不可命名为sys.py,否则将无法导入系统自带的sys模块。❗
- 模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行
import abc
,若成功则说明系统存在此模块。
- 模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行
-
模块名要遵循Python变量命名规范,不要使用中文、特殊字符;
-
也要注意,尽量不要与内置函数名字冲突。Built-in Functions — Python 3.12.1 documentation
-
-
-
使用模块
-
Python模块的标准文件模板
-
#!/usr/bin/env python3 # 标准注释,让这个hello.py文件直接在Unix/Linux/Mac上运行 # -*- coding: utf-8 -*- # 标准注释,表示.py文件本身使用标准UTF-8编码 ' a test module ' # 一个字符串,表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释; __author__ = 'Michael Liao' # 使用__author__变量把作者写进去
-
-
后续代码
-
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__': #当我们在命令行运行hello模块文件时,Python解释器把一个特殊变量__name__置为__main__ test()
-
-
调用
hello.test()
时,才能打印出Hello, word!
-
>>> hello.test() Hello, world!
-
-
-
作用域
- 正常的函数和变量名是公开的(public),可以被直接引用,比如:
abc
,x123
,PI
等; - 类似
__xxx__
这样的变量是特殊变量,可以被直接引用,但是有特殊用途,比如上面的__author__
,__name__
就是特殊变量,hello
模块定义的文档注释也可以用特殊变量__doc__
访问,我们自己的变量一般不要用这种变量名; - 类似
_xxx
和__xxx
这样的函数或变量就是非公开的(private),不应该被直接引用,比如_abc
,__abc
等;原则上是不被引用的但是不代表不能引用 - private函数或变量不应该被别人引用,那它们有什么用呢?
- 外部不需要引用的函数全部定义成private,只有外部需要引用的函数才定义为public。
- 正常的函数和变量名是公开的(public),可以被直接引用,比如:
- 安装第三方模块
-
语句:pip install Pillow,在Mac或Linux上pip命令是
pip3
-
推荐直接使用Anaconda,这是一个基于Python的数据处理和科学计算平台,它已经内置了许多非常有用的第三方库,我们装上Anaconda,就相当于把数十个第三方模块自动安装好了,非常简单易用。
-
模块搜索路径
-
当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错:
-
ImportError: No module named mymodule
-
默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在该模块的
path
变量中:-
如果我们要添加自己的搜索目录,有两种方法:
-
一是直接修改
sys.path
,添加要搜索的目录:-
>>> import sys >>> sys.path.append('/Users/michael/my_py_scripts')
-
-
第二种方法是设置环境变量
PYTHONPATH
,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量类似。注意只需要添加你自己的搜索路径,Python自己本身的搜索路径不受影响。
-
-
-
-