下面的命令序列确实可以删除
every
命名来自当前模块。
>>> import sys
>>> sys.modules[__name__].__dict__.clear()
我怀疑你是否真的想这样做,因为 "每个名字 "都包括所有的内建程序,所以在这样一个完全被抹去的过程中,你能做的并不多。 记住,在 Python 中真的没有 "变量 "这样的东西 -- 有的是objects有很多种类(包括模块、函数、类、数字、字符串......),而且有名称绑定到对象上;该序列所做的是将每个名字从一个模块中删除(相应的对象会消失,当且仅当对它们的每个引用都被删除)。
也许你想更有选择性,但很难猜到你到底是什么意思,除非你想说得更具体。 但是,只是举一个例子。
>>> import sys
>>> this = sys.modules[__name__]
>>> for n in dir():
... if n[0]!='_': delattr(this, n)
This sequence leaves alone 名称 that are private or magical, including the __builtins__
special name which houses all built-in 名称. So, built-ins still work -- for example:
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'n']
正如你所看到的,名字n
(在那个for
中的控制变量)也恰好被保留下来(因为它每次都被重新绑定在for
子句中)。所以把这个控制变量命名为_
可能更好。例如,为了清楚地表明 "它是特殊的"(另外,在交互式解释器中,每当在提示符下输入完整的表达式后,名字_
都会被重新绑定到该表达式的值上,所以它不会停留很长时间。-).
总之,一旦你确定了它到底是什么is如果你想这样做,不难为之定义一个函数,并把它放在你的启动文件(如果你只想在交互式会话中这样做)或网站定制文件(如果你想在每个脚本中这样做)。