gpt4 book ai didi

python - 使用函数从 python 环境中删除所有变量/对象

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:35 25 4
gpt4 key购买 nike

我正在使用 Jupyter Notebook 并想删除在某个时间点之后创建的所有变量。我可以使用 for 循环遍历 dir() 并将其与我使用 checkpoint = list(dir()) 在单元格中创建的检查点进行比较>.

我的目标是清理环境而不丢失我在开始时导入的库(这是我创建检查点的地方)。任何我想进一步保留的东西,我都可以添加到检查点列表并删除其余部分。

问题是,每当我想清除变量时,我不想再次编写相同的 for 循环。一旦我将该循环包装在一个函数中,它就会停止工作。没有错误;但也没有效果。

循环:

for i in list(dir()):
if i not in checkpoint:
exec('del {}'.format(i))

包裹在函数中的相同循环:

def clear_variables():
for i in list(dir()):
if i not in checkpoint:
exec('del {}'.format(i))

循环有效。该函数没有。

最佳答案

听起来您正在尝试更新您的全局词典。在遍历字典时无法安全地从字典中删除值,因此您可以先复制键:

def clear_setpoint(keep, globals=globals()):
keep = set(keep)
for key in list(globals.keys()):
if key not in keep:
del globals[key]

如果您的唯一目标是保留导入的模块,您甚至不需要创建检查点:

from types import ModuleType, FunctionType

def clear_all(globals=globals()):
for key in list(globals.keys()):
value = globals[key]
if not isinstance(value, (ModuleType, FunctionType, type)) or \
(isinstance(value, FunctionType, type) and value.__module__ == globals['__name__'] and value.__name__ != 'clear_all'):
del globals[key]

此版本将自动删除任何非函数、模块或类的内容。根据它们的 __module__ 属性,当前模块中的类和函数也将被删除。其他类和函数是 l 当然,你不想删除函数本身:)

关键是要导入,所以不删除。这不会保留导入的常量,就像您执行 from math import pi 一样。您可以结合这两种方法来保留这样的导入。

关于python - 使用函数从 python 环境中删除所有变量/对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58971782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com