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
关于python - 如何避免将循环索引泄漏到 python 2.x 的命名空间中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32702623/