python 模块的加载机制与模块的重新载入
2019-05-29 本文已影响0人
顽强的猫尾草
加载模块
import 与 from 都是赋值语句。
- import 把整个模块对象赋值给一个变量名。比如 import A : 一个文件名为 A.py 的模块被导入,生成了一个模块对象,被赋值为 A。
- from module import x:x 引用了模块中同名变量的对象。若模块没有被加载过,from 语句会将模块首先加载,再创建与模块中同名的变量名进行引用。
如果想要 import dir1.dir2.mod,则目录 dir1、dir2 下必须有个 __init__.py。__init__.py 的作用是把这个目录当成一个模块来使用 , 因为目录并不是实际的模块文件。__init__.py 可以随意写入任何 python 代码,也可以是空的。
当代码运行起来后,模块就已经全部被加载到内存中了。这是如果对 python 脚本进行修改,不会在当前运行中生效。如果想立即执行新的代码,可以重新加载这个模块。
重新加载模块
使用方法:
# Python3
from imp import reload
reload(modulename)
注意:
- reload 会重新加载已加载的模块,但原来已经使用的实例还是会使用旧的模块,而新生产的实例会使用新的模块;
- reload 不支持
from [module] import [object]
格式的重新加载,事实上只要重新加载 module 即可。
References
[1] python模块,reload所有模块以及坑
[2] Python reload() 函数