如何清除Python脚本中的所有variables?
我正在寻找类似于“清除”的东西在Matlab中:一个命令/函数,从工作区中删除所有variables,释放他们从系统内存。 Python中有这样的事情吗?
编辑:我想写一个脚本,在某些时候清除所有的variables。
以下命令序列将删除当前模块中的每个名称:
>>> import sys >>> sys.modules[__name__].__dict__.clear()
我怀疑你是否真的想这样做,因为“每一个名字”都包含了所有的内build函数,所以经过这样的彻底清除之后,你可以做的事情并不多。 请记住,在Python中确实没有“variables”这样的东西 – 有许多种类的对象 (包括模块,函数,类,数字,string等等),并且有名称绑定到对象; 该序列所做的是从模块中删除每个名称(当且仅当对它们的引用刚刚被删除时,相应的对象才会消失)。
也许你想要更有select性,但很难准确猜测你的意思,除非你想更具体。 但是,举个例子:
>>> import sys >>> this = sys.modules[__name__] >>> for n in dir(): ... if n[0]!='_': delattr(this, n) ... >>>
这个序列只留下私人或神奇的名字,包括所有内置名字的__builtins__
特殊名字。 因此,内置插件仍然有效 – 例如:
>>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'n'] >>>
正如你看到的那样,名字n
(在那里的控制variables)也会碰到(因为它每次都在for
子句中被重新绑定),所以最好命名该控制variables_
例如清楚地表明“它是特殊的”(另外,在交互式解释器中,在提示符处input每个完整expression式之后,名称_
被重新绑定到该expression式的值,所以它不会长期坚持;-)。
无论如何,一旦你确定了你想要做的是什么,为了这个目的定义一个函数并把它放到你的启动文件(如果你只想在交互式会话中)或站点自定义文件(如果你想在每个脚本)。
不,你最好重新启动解释器
Ipython是捆绑解释器的优秀替代品,并具有通常可用的%reset
命令
写一个函数。 一旦你离开它里面的所有名字消失。 以任何方式自己做这件事都是毫无意义的。
这个概念被称为命名空间 ,它非常好,它成为了Python的禅宗 :
命名空间是一个好主意 – 让我们做更多的!
这是Alex的答案的修改版本。 我们可以保存一个模块的命名空间的状态,并使用以下2种方法恢复它…
__saved_context__ = {} def saveContext(): import sys __saved_context__.update(sys.modules[__name__].__dict__) def restoreContext(): import sys names = sys.modules[__name__].__dict__.keys() for n in names: if n not in __saved_context__: del sys.modules[__name__].__dict__[n] saveContext() hello = 'hi there' print hello # prints "hi there" on stdout restoreContext() print hello # throws an exception
你也可以在调用saveContext()和clear()之前添加一行“clear = restoreContext”,就像matlab的clear一样。