尝试删除放入模块时不起作用的变量的实用函数

问题描述 投票:0回答:1

我有一个很长的 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()给出了在函数抵抗的模块中定义的变量,但我发现在我的工具箱中有这样一个函数很方便,而不必定义在每个笔记本中再一次。

有没有一种优雅的方式来实现这个功能?我应该传递一些额外的参数吗?

python namespaces ipython
1个回答
0
投票
我宁愿在函数中传递作用域。修改代码如下:

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'])
这将确保您的变量仅从模块范围内清除。

© www.soinside.com 2019 - 2024. All rights reserved.