列表推导和循环中的变量泄漏
考虑以下列表理解
Python 2.x <= 2.7
i = 0
a = [i for i in range(3)]
print(i) # Outputs 2
这只发生在 Python 2 中,因为列表理解将循环控制变量泄漏到周围的范围( 源 )中。此行为可能导致难以发现的错误,并已在 Python 3 中修复。
Python 3.x >= 3.0
i = 0
a = [i for i in range(3)]
print(i) # Outputs 0
类似地,for 循环的迭代变量没有私有范围
i = 0
for i in range(3):
pass
print(i) # Outputs 2
这种行为发生在 Python 2 和 Python 3 中。
为避免泄漏变量的问题,请在列表推导中使用新变量,并在适当时使用循环。