以下python代碼生成[(0,0),(0,7)...(0,693)]而不是組合所有3和倍數倍數的期望列表7:python生成器的行爲不一致
multiples_of_3 = (i*3 for i in range(100))
multiples_of_7 = (i*7 for i in range(100))
list((i,j) for i in multiples_of_3 for j in multiples_of_7)
此代碼解決了這個問題:
list((i,j) for i in (i*3 for i in range(100)) for j in (i*7 for i in range(100)))
問題:
- 發電機對象似乎發揮迭代器的作用,我而不是在每次生成列表都要枚舉時提供迭代器對象。後來的策略似乎被.NET LINQ查詢對象所採用。有沒有一種優雅的方式來解決這個問題?
- 第二段代碼如何工作?我應該理解,在循環遍歷所有7的倍數後,生成器的迭代器不會被重置?
- 難道你不認爲這種行爲是違反直覺的,如果不矛盾?
閱讀:[Python yield關鍵字解釋](http://stackoverflow.com/questions/231767/the-python-yield-keyword-explained)。 – Bakuriu