列表推導和迴圈中的變數洩漏
考慮以下列表理解
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 中。
為避免洩漏變數的問題,請在列表推導中使用新變數,並在適當時使用迴圈。