我是 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 许可协议
尝试这个:
请注意, 文档 实际上并没有说您可以安全地修改
globals()
返回的字典,也没有说修改该字典会产生您想要的效果(或任何效果)。但是,如果您只是为了在 REPL 中方便而这样做,那么如果它有效,它就有效。