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

标签 python python-2.7 language-design python-2.x

for i in mylist:
    process(i)

[process(j) for j in mylist]

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

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

最佳答案

除了显式删除 ij 之外,您无能为力:

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/

相关文章:

Python - 如何将 IF 语句转换为函数以使用其他字符串多次调用?

python - 当用户在python中单击 'ok'时,如何保存用户文本框输入?

python - get_text() 或文本属性不适用于标签

swift - 为什么 Swift 需要显式参数类型,即使它们可以从默认值推断出来?

python - 使用 lxml 在 xml 中进行复杂搜索

python - 在 python 中过滤生成的排列

python - 具有共同中心元素的组装列表

c# - 为什么解析助手没有变得更易于使用?

c++ - 为什么 c/c++ 允许在函数调用中省略多维数组的最左边索引?

python - 使用 Python 编辑 RTF 文件