我在Matlab中寻找类似于'clear'的东西:一个命令/函数,它从工作区中删除所有变量,从系统内存中释放它们.Python中有这样的东西吗?
编辑:我想写一个脚本,在某些时候清除所有变量.
Ale*_*lli 53
以下命令序列确实从当前模块中删除了每个名称:
>>> import sys
>>> sys.modules[__name__].__dict__.clear()
Run Code Online (Sandbox Code Playgroud)
我怀疑你实际上是否想要这样做,因为"每个名字"都包含所有内置插件,因此在完全消除之后你无能为力.请记住,在Python中实际上没有"变量"这样的东西 - 有许多种类的对象(包括模块,函数,类,数字,字符串......),还有绑定到对象的名称 ; 序列的作用是从模块中删除每个名称(当且仅当对它们的每个引用都被删除时,相应的对象才会消失).
也许你想要更具选择性,但除非你想要更具体,否则很难准确猜出你的意思.但是,举一个例子:
>>> import sys
>>> this = sys.modules[__name__]
>>> for n in dir():
... if n[0]!='_': delattr(this, n)
...
>>>
Run Code Online (Sandbox Code Playgroud)
此序列仅保留私有或神奇的__builtins__名称,包括包含所有内置名称的特殊名称.因此,内置函数仍然有效 - 例如:
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'n']
>>>
Run Code Online (Sandbox Code Playgroud)
正如你所看到的那样,name n(其中的控制变量for)也会碰巧(因为它for每次都在子句中重新绑定),所以命名控制变量可能更好_,例如,清楚地显示"它是特殊的"(另外,在交互式解释器中,名称_在提示符输入的每个完整表达式后仍然重新绑定到该表达式的值,因此它不会长时间保持;-).
无论如何,一旦你已经确定到底是什么是你想做的事,这不是很难定义的功能为目的,并把它放在你的启动文件(如果你只在互动环节希望它)或网站-自定义文件(如果你想在每个脚本中使用它).
from IPython import get_ipython;
get_ipython().magic('reset -sf')
Run Code Online (Sandbox Code Playgroud)
这是亚历克斯答案的修改版本。我们可以使用以下两种方法保存模块命名空间的状态并恢复它...
__saved_context__ = {}
def saveContext():
import sys
__saved_context__.update(sys.modules[__name__].__dict__)
def restoreContext():
import sys
names = sys.modules[__name__].__dict__.keys()
for n in names:
if n not in __saved_context__:
del sys.modules[__name__].__dict__[n]
saveContext()
hello = 'hi there'
print hello # prints "hi there" on stdout
restoreContext()
print hello # throws an exception
Run Code Online (Sandbox Code Playgroud)
您还可以在调用 saveContext() 之前添加一行“clear = restoreContext”,并且 clear() 将像 matlab 的 clear 一样工作。
| 归档时间: |
|
| 查看次数: |
256361 次 |
| 最近记录: |