列表理解中洩露的變數
Python 2.x >= 2.3
x = 'hello world!'
vowels = [x for x in 'AEIOU']
print (vowels)
# Out: ['A', 'E', 'I', 'O', 'U']
print(x)
# Out: 'U'
Python 3.x >= 3.0
x = 'hello world!'
vowels = [x for x in 'AEIOU']
print (vowels)
# Out: ['A', 'E', 'I', 'O', 'U']
print(x)
# Out: 'hello world!'
從示例中可以看出,在 Python 2 中,x
的值被洩露:它掩蓋了 hello world!
並列印出 U
,因為這是當迴圈結束時 x
的最後一個值。
但是,在 Python 3 中,x
列印最初定義的 hello world!
,因為列表推導中的區域性變數不會遮蔽周圍範圍內的變數。
此外,生成器表示式(自 2.5 以來在 Python 中可用)或字典或集合理解(從 Python 3 向後移植到 Python 2.7)都不會洩漏 Python 2 中的變數。
請注意,在 Python 2 和 Python 3 中,使用 for 迴圈時,變數將洩漏到周圍的範圍中:
x = 'hello world!'
vowels = []
for x in 'AEIOU':
vowels.append(x)
print(x)
# Out: 'U'