我的一個朋友問我這段代碼:
array = [1, 8, 15]
gen = (x for x in array if array.count(x) > 0)
array = [2, 8, 22]
print(list(gen))
輸出:
[8]
問題是:其他元素去了哪里?
uj5u.com熱心網友回復:
答案在生成器運算式的 PEP 中,尤其是Early Binding vs Latebiding會話:
經過多次討論,決定第一個(最外面的)for 運算式應該立即計算,其余的運算式在生成器執行時計算。
所以基本上這個運算式:
x for x in array
使用值[1, 8, 15](即立即)進行評估,另一個:
if array.count(x) > 0
使用以下方法執行生成器時評估:
print(list(gen))
此時陣列的值是 [2, 8, 22]
uj5u.com熱心網友回復:
如果你給每個陣列一個唯一的名字而不是重新系結,這會變得更加清楚array:
array1 = [1, 8, 15]
gen = (x for x in array1 if array2.count(x) > 0)
array2 = [2, 8, 22]
print(list(gen))
x for x in array1在創建生成器時if array2.count(x) > 0被評估,但被惰性評估,這就是為什么你已經可以參考一個尚未定義的變數
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/329050.html
標籤:Python
