删除一个变量然后重新加载模块后,如何让命名空间不保留这个变量?
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
重新加载后。
"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 whichx
is not in thedir
after delete and reload?
答案是你不能。但是你可以这样做:
del ex1.x
重新加载后。