我找到了這個例子,但我不明白為什么它的工作不可預測?我認為它必須輸出[1, 8, 15]或[2, 8, 22].array = [1, 8, 15]g = (x for x in array if array.count(x) > 0)array = [2, 8, 22]print(list(g))>>>[8]
3 回答

手掌心
TA貢獻1942條經驗 獲得超3個贊
從生成器表達式的文檔:
當為生成器對象調用該方法時,生成器表達式中使用的變量會被延遲計算__next__()(與普通生成器的方式相同)。但是,最左邊for子句中的可迭代表達式會立即求值,因此它產生的錯誤將在定義生成器表達式的位置發出,而不是在檢索第一個值的位置發出。
所以當你跑
array = [1, 8, 15]
g = (x for x in array if array.count(x) > 0)
僅array計算生成器表達式中的第一個。x并且array.count(x)只會在您調用時進行評估next(g)。由于您在使用生成器之前array指向另一個列表[2, 8, 22] ,因此您會得到“意外”結果。
array = [2, 8, 22]
print(list(g)) # [8]
添加回答
舉報
0/150
提交
取消