Python语言reload()函数重新载入模块

Python语言reload()函数重新载入模块

SoHo 2019.04.02

对于一个大型脚本语言而言,通常需要将其功能细化。将实现不同功能的代码写在不同的脚本中,这样方便在其他脚本需要使用此功能时可以以模块的形式导入。极大地方便了脚本的维护和重用。

导入模块的方法

浅析重新载入模块之前先简单了解一下python导入模块的机制。
导入模块或模块中的函数通常有三种方法:

import 模块名
import 模块名 as 新名字
from 模块名 import 函数名

其中,使用 import 是将整个模块导入,使用 from 则是将模块中的某个函数或者名字导入,而不是导入整个模块。想要使用 import 导入模块中的函数,必须以模块名+"."+函数名的形式调用函数;而想要使用 from 导入模块中的某个函数,可以直接使用函数名调用。
Python语言reload()函数重新载入模块_第1张图片
使用 from 导入模块后调用函数会轻松得多。如果想要将模块中的所有函数都采用这种方式导入,可以使用通配符 “*”。
Python语言reload()函数重新载入模块_第2张图片

重新导入模块

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

继续上一个例子
Python语言reload()函数重新载入模块_第3张图片
这样就实现了在程序运行中改变参数的目标。

强调

使用 reload()函数的前提,是reload()函数重新导入的模块在之前已经使用import或者from导入成功了,否则,reload()也无法生效

你可能感兴趣的:(python)