删除一个变量然后重新加载模块后,如何让命名空间不保留这个变量?

After delete a variable and then reload the module,how can I make the namespace not retain this variable?

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

根据 (DOCS):

When a module is reloaded, its dictionary (containing the module’s global variables) is retained.

这是一个简单的例子:

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)

所以,我的问题是如何在删除并重新加载后得到 dict 其中 x 不在 dir 中?

你没看够,你引用的那句话后面来了:

Redefinitions of names will override the old definitions, so this is generally not a problem. If the new version of a module does not define a name that was defined by the old version, the old definition remains.

所以,你引用的这句话只适用于在旧版本模块中定义的变量,而在新版本模块中没有定义。

所以对于你的问题:

So, my question is how can I get a dict in which x is not in the dir after delete and reload?

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

del ex1.x

重新加载后。