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

wat*_*wer 5 python pycharm python-3.x

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

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

第一种方法:

%Reset
Run Code Online (Sandbox Code Playgroud)

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

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
Run Code Online (Sandbox Code Playgroud)

这很烦人。

第二种方法:

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

from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = "all"
Run Code Online (Sandbox Code Playgroud)

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

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

列表看起来像这样

Out[4]: 
['In',
 'InteractiveShell',
 'Out',
 '_',
 '_2',
 '__',
 '___', 
......(continued)
 'sys']
Run Code Online (Sandbox Code Playgroud)

有什么办法,我可以删除用户创建的变量而不删除上面的变量?实际上,我想rm(list=ls())在 R 中复制对我有用的东西。

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

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

kay*_*ya3 7

尝试这个:

>>> 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
Run Code Online (Sandbox Code Playgroud)

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


def*_*oxy 2

如果您希望简单地清除在控制台中定义的所有变量..那就是撤消代码所做的一切并“重新开始”..

类型:

exit
Run Code Online (Sandbox Code Playgroud)

在控制台中

在 Spyder 中,这只是清除工作区中代码已完成的任何操作。与关闭并重新启动 Anaconda 的效果相同,但不必这样做。现在您可以使用新的工作区运行代码!