我一直在寻找这个问题的准确答案已有几天了,但是还没有任何好的结果。我不是编程的完整初学者,但即使在中级水平上也还不是。
当我进入Python的外壳程序时,键入:dir()并且可以看到当前作用域(主块)中所有对象的所有名称,其中有6个:
dir()
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__']
然后,例如,当我声明一个变量时,x = 10它会自动添加到内置模块下的对象列表中dir(),当我dir()再次键入时,它现在显示:
x = 10
['__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'x']
函数,类等也是如此。
我如何删除所有这些新对象而不删除开始时可用的标准6?
我在这里阅读了有关“内存清理”,“控制台清理”的信息,该命令将删除命令提示符窗口中的所有文本:
>>> import sys >>> clear = lambda: os.system('cls') >>> clear()
但是,所有这些都与我要实现的目标无关,它不会清除所有使用过的对象。
您可以使用以下方法删除个人名称del:
del
del x
或者您可以将它们从globals()对象中删除:
globals()
for name in dir(): if not name.startswith('_'): del globals()[name]
这只是一个示例循环;它仅在防御性上删除不以下划线开头的名称,并假设(并非毫无道理)您在解释器的开头仅使用了没有下划线的名称。如果您确实想透彻一点,则可以使用硬编码的名称列表来保留(白名单)。除了退出并重新启动解释器外,没有内置功能可以为您执行清除操作。
您导入(import os)的模块将保持导入状态,因为它们被sys.modules;引用。随后的导入将重用已经导入的模块对象。您只是在当前的全局名称空间中没有对它们的引用。
import os
sys.modules