Skip to main content
 首页 » 编程设计

python之如何避免将循环索引泄漏到 python 2.x 的命名空间中

2025年05月04日15wuhuacong

for i in mylist: 
    process(i) 
 
[process(j) for j in mylist] 

在执行结束时,i 和 j 保留在命名空间中,最后的值为 mylist。

除了创建一个专门的函数来隐藏 i 之外;隐藏循环索引的其他方法是什么?

请您参考如下方法:

除了显式删除 i 和 j 之外,您无能为力:

for i in mylist: 
    process(i) 
 
[process(j) for j in mylist] 
 
print j, i  # -> 8 8 
del i, j 
print j, i  # NameError: name 'j' is not defined 

旁注:如果列表为空,则变量保持未定义状态:

for i in []: 
    pass 
print i  # NameError: name 'i' is not defined 

还有一件事:在 python 2.x 中,来自列表推导的变量(尽管不是生成器表达式)也被泄露了;在 python 3.x 中,这是一个 NameError。

[i for i in range(3)] 
print i  #  2