模块加载
模块加载时,主要完成以下动作:
- 在当前模块中加载由
import yy
或者from xx import yy
导入的未被其他模块导入过的模块; - 对模块中的类或者函数定义进行语法检查(ps:检查类属性和成员函数,不检查函数体),创建类定义对象和函数定义对象;
- 执行模块中的外层语句;
- 将类定义对象、函数定义对象和模块内的对象输出到该模块对应的二进制文件(.pyc为后缀的模块文件)。
注:输出到二进制文件有以下两个好处
- 避免模块被重复加载;
- 多次运行程序,若模块未变化,将不再做语法检查,也不创建模块二进制文件,直接从二进制文件中获取模块内的对象,提高运行效率。
非重复导入模块
base.py文件
print("module name:", __name__)
demo.py文件
import base
print("module name:", __name__)
main.py文件
import base
print("after import:", base.__name__)
print("-"*30)
import demo
print("after import:", demo.__name__)
print("-"*30)
if __name__ == "__main__":
print("run", __name__)
代码输出:
module name: base
after import: base
--