You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过子串批量删除Python当前环境中的变量?

批量删除Python环境中特定前缀的变量

你原来的代码之所以没生效,是因为dir()返回的是变量名的字符串列表,循环里的i只是这些字符串(比如'x1'),del i删掉的是循环变量i本身,根本没碰全局命名空间里的x1、x2这些变量。

要批量删除符合条件的变量,得直接操作Python的命名空间字典:

全局环境下的解决方案

Python的globals()函数会返回当前全局命名空间的字典,键是变量名,值是变量对应的对象。我们可以遍历这个字典,删除符合前缀条件的键:

x1 = 5
x2 = 1
x3 = 100
y = 'Desk'

# 先把全局命名空间字典存下来
global_namespace = globals()
# 遍历需要删除的变量名(必须转成列表,避免遍历字典时修改字典引发错误)
for var_name in list(global_namespace.keys()):
    if var_name.lower().startswith('x'):
        del global_namespace[var_name]

print(y)  # 正常输出 'Desk'
# print(x1)  # 取消注释会抛出 NameError,说明x1已被删除

函数内局部环境的注意点

如果是在函数内部处理局部变量,locals()返回的字典是只读的,不能直接通过del修改。这种情况下如果要批量删除局部变量,通常有两种思路:

  • 如果变量是全局的,还是用上面的globals()方法
  • 或者重构代码,把需要管理的变量放到一个自定义字典里,直接操作这个字典会更安全可控,比如:
def my_func():
    # 用自定义字典存变量,而非直接用局部命名空间
    vars_dict = {
        'x1': 5,
        'x2': 1,
        'x3': 100,
        'y': 'Desk'
    }
    # 删除字典中以x开头的键
    for key in list(vars_dict.keys()):
        if key.lower().startswith('x'):
            del vars_dict[key]
    print(vars_dict['y'])

my_func()

内容的提问来源于stack exchange,提问作者Jared Greathouse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:45:02