亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

生成器表達式使用生成器創建后分配的列表

生成器表達式使用生成器創建后分配的列表

肥皂起泡泡 2021-07-19 16:35:09
我找到了這個例子,但我不明白為什么它的工作不可預測?我認為它必須輸出[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]


查看完整回答
反對 回復 2021-07-28
  • 3 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號