资料来源
(1) Python基础教程第三版
1.模块的工作原理
1.1 简单的模块及使用
1.1.1 模块的本质
(1) 模块就是程序,任何python程序都可以作为模块导入;
1.1.2 简单的模块示例
#hello.py print("Hello, world!")
1.1.3 模块的使用
import sys sys.path.append(‘C:/python’) #C:/python是模块hello.py的文件存储位置
注1:上述代码告诉解释器,除了通常查找的位置外,还应到C:\python中去查找;这样做后,就可以通过import hello导入这个模块;
注2:当导入模块时,其所在目录除源代码文件外,还新建一个名为__pycache__的子目录;这个目录包含处理后的文件,python能够更高效地处理它们;以后再倒入这个模块时,如果.py文件没有发生变化,python将导入处理后的文件,否则将重新生成处理后的文件;
注3:模块并不是用来执行操作的,而是用来定义变量、函数、类等;
1.2 模块是用来下定义的
1.2.1 创建模块的原因
(1) 它们可以像类一样,有自己的作用域;
(2) 使用模块实现了代码重用,将代码放在模块中,可以在多个程序中使用它们;
1.2.2 在模块中定义函数
#hello2.py def hello(): print("Hello, world!")
import hello2 hello2.hello()
1.2.3 在模块中添加测试代码
#带测试代码的模块 #hello3.py def hello(): print("Hello, world!") #测试代码: hello()
注1:但是这样操作存在问题: 如果将该模块作为普通程序运行,发现运行正常; 但如果在另一个程序中将其作为模块导入,也将执行测试代码; 为了避免这种行为,需要检查模块是作为程序运行还是被导入另一个程序;这种情况下,需要使用__name__;
注2: 在主程序中,__name__的值是‘__main__’;而在使用模块的程序中,被导入模块的__name__被设置为模块的名称;
#更加完美的带测试代码的模块 #hello4.py def hello(): print("Hello, world!") def test(): hello() if __name__=='__main__': test()
1.2.4 让模块可用
1.2.4.1 将模块放在正确的位置
(1) 找出python解释器到哪里查找模块,再将模块文件放在该处即可;
import sys import pprint pprint.pprint(sys.path) #可以将模块放到pprint打印出的任何一个路径下
1.2.4.2 告诉解释器去哪里寻找
(1) 1.2.4.1将模块放在正确的位置有其局限性,比如python解释器的目录中充斥着编写的模块,或者没有写权限,无法将文件保存在python解释器的目录中;
(2) 如果将模块放到其他地方,就需要告诉解释器去哪里寻找;一种方法是修改sys.path,如1.1.3所示; 另一种比较标准的方法是将模块所在目录包含在环境变量PYTHONPATH中;
1.2.5 包(package)
(1) 为组织模块,可将其编组为包; 包是另一种模块,可以包含其他模块;
(2) 包是一个目录,该目录中必须包含文件__init__.py;