我有一个很长的 ipynb 文件。我想定期清理笔记本中不再需要的变量中的命名空间。
我为此编写了一个实用函数:
def clean_namespace(variables_to_delete):
deleted = []
for variable in variables_to_delete:
if variable in globals():
del globals()[variable]
deleted.append(variable)
return deleted
该函数工作正常,它从给定的变量名称列表中删除所有现有变量。
如果我想在多个 jupyter 笔记本中使用它,那么将其定义放在一个模块中是合乎逻辑的,比如说“my_utils.py”。
但是,如果我尝试:
from my_utils import clean_namespace
clean_namespace(['var1','var2'])
即使在调用时笔记本中存在“var1”,它也不会删除任何内容。
我从@Steven Scott对这个答案的评论中了解到,globals()给出了在函数抵抗的模块中定义的变量,但我发现在我的工具箱中有这样一个函数很方便,而不必定义在每个笔记本中再一次。
有没有一种优雅的方式来实现这个功能?我应该传递一些额外的参数吗?
def clean_namespace(scope, variables_to_delete):
deleted = []
for variable in variables_to_delete:
if variable in scope:
del scope[variable]
deleted.append(variable)
return deleted
那么我会这样称呼它:
from my_utils import clean_namespace
clean_namespace(globals(), ['var1','var2'])
这将确保您的变量仅从模块范围内清除。