在 Python 中清除用户创建的变量

新手上路,请多包涵

我是 Python 的绝对初学者。我使用 R 和 Matlab 进行数据分析已经有一段时间了。这些语言(或工具)的一大优点是我可以在 Matlab 中运行 clear all rm(list=ls()) 在 R 中运行 — 以清除我创建的变量。然后我可以继续试验我的代码片段。

我正在努力在 Python 中找到这样的解决方案。我研究 过有没有办法从解释器的内存中删除创建的变量、函数等? 发现有两种方法可以完成我想做的事情,但实际上它们并不接近。

第一种方法:

 %Reset

此命令删除 PyCharm 中的所有变量和导入设置以运行交互模式。也就是说,运行上面的命令后,我必须重新运行

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

这很烦人。

第二种方法:

另一个建议的方法是编写一个 for 循环并忽略以 __ 开头的函数。由于上述原因,这也不起作用。例如,当我启动 PyCharm 时,我运行

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"

以确保我能够像在 Matlab 和 R 中一样同时运行一堆命令(在 PyCharm 中,键盘快捷键是 [Alt + Shift + E;这在控制台中称为执行选择])。我注意到 Stackoverflow 线程中提到的 for 循环删除了通过运行以上两行代码创建的一些变量。这意味着我将无法通过一次选择它们来执行语句。我将不得不在提示符下单独键入它们,这很烦人。另一种选择是每次执行 for 循环时都运行以上两行代码,这也很烦人。

顺便说一句,我做了一些研究以了解运行以上两行代码后会发生什么。我跑了 dir() 在运行上面两行之后得到我的会话中存在的所有变量的列表。

列表看起来像这样

Out[4]:
['In',
 'InteractiveShell',
 'Out',
 '_',
 '_2',
 '__',
 '___',
......(continued)
 'sys']

有什么办法,我可以在不删除上述变量的情况下删除用户创建的变量?实际上,我想复制 rm(list=ls()) 在 R 中为我做的事情。

我看到有很多人在 StackOverflow 之外问过这个问题,例如 https://github.com/spyder-ide/spyder/issues/2563

谢谢你的帮助。我将 PyCharm 与最新的 Conda 发行版 (3.6) 一起使用。

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

阅读 782
1 个回答

尝试这个:

 >>> x = 1
>>> x
1
>>> globals().clear()
>>> x
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    x
NameError: name 'x' is not defined

请注意, 文档 实际上并没有说您可以安全地修改 globals() 返回的字典,也没有说修改该字典会产生您想要的效果(或任何效果)。但是,如果您只是为了在 REPL 中方便而这样做,那么如果它有效,它就有效。

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

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