回答
在Python 3.3+中,您可以使用yield from
。例如,
>>> def get_squares():
... yield from (num ** 2 for num in range(10))
...
>>> list(get_squares())
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
它實際上可以用於任何迭代。例如,
>>> def get_numbers():
... yield from range(10)
...
>>> list(get_numbers())
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> def get_squares():
... yield from [num ** 2 for num in range(10)]
...
>>> list(get_squares())
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
不幸的是,Python 2.7版沒有等價的結構:'(
我不認爲輔助函數在Py2.7中的功能與Py3.3中的「yield from」的功能完全相同。調用這個函數只是返回另一個生成器對象,所以它和內建的iter非常相似。如果你在一個函數內調用你的'yield_from()',這個函數不會自動變成一個生成函數,就像'yield from'那樣。就我[理解](https://www.python.org/dev/peps/pep-0380/#motivation)而言,在Py2.7中,您需要編寫顯式的for-loop,如OP所示。 – 2015-04-04 11:47:38
@BasSwinckels是的,幫助函數是不一樣的。但是,您可以將生成器委託給該函數,它會使代碼更簡單,不是嗎? – thefourtheye 2015-04-04 11:49:49
不,我認爲輔助函數沒用,因爲它不會從調用函數中產生。正如PEP所顯示的那樣,這個'for i in generator:yield i'不能被分解爲單獨的函數。你只是重寫'iter' ... :) – 2015-04-04 11:51:48
您可以使用列表解析讓所有的元素出來發生器(假設發電機結束) :
[x for x in generator]
這會否定發生器的一些惰性屬性,即將其輸出轉換爲列表? – 2015-04-04 12:12:58
當然。通過轉換爲列表,您可以分配所有必要的內存來存儲生成器「生成」的數據。另外,如果生成器沒有完成上述語句將永不終止。 – 2015-04-04 12:14:51
單線成本很高...... – 2015-04-04 12:17:04
這裏是Python中簡單的一行有效2.5+的要求;-):
for thing in generator: yield thing
- 1. 是否有Object.keys.map的簡寫
- 2. 是否有Form.BeginInvoke的簡寫?
- 3. babel.js產生沒有輸出
- 4. 是否有產生記得所有我們所遇到
- 5. 的MapReduce沒有產生一個輸出
- 6. 爲什麼通過產量比由xrange產生的發電機產生的發電機更快?
- 7. 檢查命令是否產生輸出
- 8. 冒泡排序沒有產生所需的輸出
- 9. 是否有可能產生具有FPDF
- 10. 耳機拔出時是否有事件發生?
- 11. 通過電子郵件發送Powershell腳本的所有輸出
- 12. 從yeomon發電機到生產
- 13. 簡單:: XCOPY不生產輸出.bat
- 14. 打印:生產沒有輸出
- 15. mongo find()產生沒有輸出與eval
- 16. 找出所有數組值是否爲空的簡單方法?
- 17. 產生Localizable.strings產生奇怪的輸出
- 18. 選擇所有,並給隨機輸出(隨機排序輸出)
- 19. C隨機數發生器有時產生相同的數字
- 20. Dropbox是否有適用於所有生產應用程序的市場地址
- 21. 輸出不是在hadoop中產生的
- 22. 所有的Tensorflow輸出都是nan
- 23. 生成文件:有3種輸入產生一個輸出
- 24. 有沒有AngularJS的自動發電機?
- 25. 有沒有免費的BDC發電機?
- 26. 是否有RoboHelp替代產生XAML?
- 27. mvn不生產所有artifcats
- 28. 爲什麼發電機給出相同的輸出,如果沒有分配給
- 29. 是否有輸出的字符限制
- 30. 是否有它可以產生一個有效的C程序
答案是**否**。 – 2015-04-04 11:08:41
http://stackoverflow.com/questions/17581332/converting-yield-from-statement-to-python-2-7-code是相關的 – 2015-04-04 11:11:07
那些低估了這個問題的人會關心澄清嗎?這個問題非常清楚,如果它是重複的,你應該已經鏈接到原始。 – Tibor 2015-04-04 11:13:20