Python语言reload()函数重新载入模块
SoHo 2019.04.02
对于一个大型脚本语言而言,通常需要将其功能细化。将实现不同功能的代码写在不同的脚本中,这样方便在其他脚本需要使用此功能时可以以模块的形式导入。极大地方便了脚本的维护和重用。
导入模块的方法
浅析重新载入模块之前先简单了解一下python导入模块的机制。
导入模块或模块中的函数通常有三种方法:
import 模块名
import 模块名 as 新名字
from 模块名 import 函数名
其中,使用 import 是将整个模块导入,使用 from 则是将模块中的某个函数或者名字导入,而不是导入整个模块。想要使用 import 导入模块中的函数,必须以模块名+"."+函数名的形式调用函数;而想要使用 from 导入模块中的某个函数,可以直接使用函数名调用。

使用 from 导入模块后调用函数会轻松得多。如果想要将模块中的所有函数都采用这种方式导入,可以使用通配符 “*”。

重新导入模块
Python中上述三种方法可以导入模块文件,但是 import 语句只是第一次导入的时候会执行模块文件中的代码,然后就会把导入的模块文件存入到内存,当再次 import 导入的时候,Python是直接从内存里面取出模块文件,而不会执行模块文件的内容。
reload()函数强制Python重新导入并执行模块文件(更新模块文件),reload()不具有传递性。
假设已存在模块文件 hello.py:
def Hello():
print("Hello World !")
引用该模块

修改hello.py模块并且不退出可交互式控制台继续执行上述代码
hello.py
def hello():
print("Hello Python !")

可见在不关闭python的情况下,即使 hello.py文件被修改,也不会被调用,因为修改之前的hello.py已经被导入,并且存入内存,python直接从内存里面取出模块文件。
这时我们可以使用imp.reload()(python3,对于Python 2.X来说,reload是一个内置函数)函数重新载入模块,如:
import imp
imp.reload(hello)
或
from imp import reload
继续上一个例子

这样就实现了在程序运行中改变参数的目标。
强调
使用 reload()函数的前提,是reload()函数重新导入的模块在之前已经使用import或者from导入成功了,否则,reload()也无法生效
2138

被折叠的 条评论
为什么被折叠?



