我是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)。
答案 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相同,但不必这样做。 现在,您可以在新的工作空间中运行代码了!