这里有不同的问题。在Is this code correct?# remove all created objects
for v in dir(): del globals()[v]
不,不是的!首先dir()返回本地映射中的键。在模块级别,它与globals()相同,但不是在函数内部。接下来它包含一些您不想删除的对象,比如__builtins__。。。在Is there any function which will give the same output like R's ls()?
不完全是,但您可以尝试用一个类来模拟它:
^{pr2}$
当您创建一个更干净的对象时,它会保留一个包含所有已存在对象的列表(更确切地说是一个set对象)。当您调用它的clean方法时,它将从它的globals()映射中删除自创建以来添加的所有对象(包括它自己!)在
示例(使用未注释的跟踪):>>> class Cleaner:
def __init__(self):
self.reset()
def reset(self):
self.keep = set(globals());
def clean(self):
g = list(globals())
for __i in g:
if __i not in self.keep:
print("Removing", __i) # uncomment for tracing what happens
del globals()[__i]
>>> dir()
['Cleaner', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
>>> c = Cleaner()
>>> i = 1 + 2
>>> import sys
>>> dir()
['Cleaner', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'c', 'i', 'sys']
>>> c.clean()
Removing c
Removing i
Removing sys
>>> dir()
['Cleaner', '__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']