如何清除 Python 脚本中间的所有变量?

新手上路,请多包涵

我在 Matlab 中寻找类似于“清除”的东西:一个命令/函数,它从工作区中删除所有变量,从系统内存中释放它们。 Python中有这样的东西吗?

编辑:我想编写一个脚本,在某些时候清除所有变量。

原文由 snakile 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

以下命令序列确实从当前模块中删除了 每个 名称:

 >>> import sys
>>> sys.modules[__name__].__dict__.clear()

我怀疑您是否真的想要这样做,因为“每个名称”都包含所有内置功能,因此在彻底清除之后您无能为力。请记住,在 Python 中实际上没有“变量”之类的东西——有多种类型的 _对象_(包括模块、函数、类、数字、字符串……),还有绑定到对象的 _名称_;该序列所做的是从模块中删除每个名称(当且仅当对它们的每个引用都刚刚被删除时,相应的对象才会消失)。

也许你想更有选择性,但除非你想更具体,否则很难准确猜出你的意思。但是,举个例子:

 >>> import sys
>>> this = sys.modules[__name__]
>>> for n in dir():
...   if n[0]!='_': delattr(this, n)
...
>>>

这个序列只留下私有或神奇的名称,包括 __builtins__ 包含所有内置名称的特殊名称。所以,内置插件仍然有效——例如:

 >>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'n']
>>>

如您所见,名称 n (其中的控制变量 for )也恰好存在(因为它每次都在 for 子句中重新绑定),因此最好将控制变量命名为 _ 例如,以清楚地显示“它很特别”(另外,在交互式解释器中,名称 _ 是重新绑定的无论如何,在提示符处输入每个完整的表达式之后,该表达式的值,所以它不会停留很长时间;-)。

无论如何,一旦你确定了你想要做什么,就 不难 为此定义一个函数并将它放入你的启动文件(如果你只希望它在交互式会话中)或站点自定义文件(如果您希望在每个脚本中都使用它)。

原文由 Alex Martelli 发布,翻译遵循 CC BY-SA 2.5 许可协议

不,你最好重新启动解释器

IPython 是捆绑解释器的优秀替代品,并且具有通常有效的 %reset 命令

原文由 John La Rooy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题