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

时间:2018-01-14 22:12:16

标签: python python-3.x pycharm

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

我很难在Python中找到这样的解决方案。我研究了Is there a way to delete created variables, functions, etc from the memory of the interpreter?并发现有两种方法可以完成我想要做的事情,但实际上它们并没有任何接近。

第一种方法:

%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)。

2 个答案:

答案 0 :(得分:4)

尝试一下:

>>> 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

请注意,the docs并不是说您可以安全地修改globals()返回的字典,也不能说修改此字典将具有您想要的效果(或根本没有效果)。但是,如果您只是为了在REPL中方便起见,那么它会起作用。

答案 1 :(得分:0)

如果您只想清除在控制台中定义的所有变量,即撤消代码已完成的所有操作并“重新开始”。

类型:

exit

在控制台中

在Spyder中,这只是清除工作区中您代码已完成的所有工作。与关闭并重新启动Anaconda相同,但不必这样做。 现在,您可以在新的工作空间中运行代码了!