删除变量然后重新加载模块后,如何使命名空间不保留此变量?

时间:2018-01-14 04:15:26

标签: python reload

"重新加载"如果在重新加载之前将模块中的文件删除,则函数无法删除已加载到内存中的变量。换句话说,即使您在重新加载之前删除变量,它仍然存在。

根据(DOCS):

  

重新加载模块时,会保留其字典(包含模块的全局变量)。

这是一个简单的例子:

import importlib
import time
def main():
    import ex1
    i = 0
    while True:
        importlib.reload(ex1)
        ex1.x = ex1.x + 1
        i = i + 1
        print("loop:%d" %i)
        print("x:%d" %ex1.x)
        print(dir(ex1))
        time.sleep(5)

ex1模块重新加载前的内容:

x = 1
y = 1

然后删除x并重新加载ex1,我们会发现x仍然在dir(ex1)

所以,我的问题是如何在删除并重新加载后dictx不会出现dir

1 个答案:

答案 0 :(得分:0)

在你引用的句子出现后,你的阅读能力不够:

  

名称的重新定义将覆盖旧定义,因此这通常不是问题。如果新版本的模块未定义旧版本定义的名称,则旧定义仍然存在。

因此,您引用的句子仅适用于旧版本模块中定义的变量,但未在模块的新版本中定义。

那么你的问题:

  

所以,我的问题是如何在删除并重新加载后dictx不会出现dir

答案是你不能。但是你可以这样做:

del ex1.x

重装后。