回答
在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. 是否有Form.BeginInvoke的簡寫?
- 2. 是否有Object.keys.map的簡寫
- 3. 所有開發機器(macmini)的生產證書和供應是否相同
- 4. babel.js產生沒有輸出
- 5. 是否有產生記得所有我們所遇到
- 6. 簡單的makefile沒有產生輸出文件(正確)
- 7. WordPress的簡碼不產生輸出
- 8. 的MapReduce沒有產生一個輸出
- 9. 檢查命令是否產生輸出
- 10. 爲什麼通過產量比由xrange產生的發電機產生的發電機更快?
- 11. php表單被髮送到電子郵件沒有產生正確的輸出?
- 12. 冒泡排序沒有產生所需的輸出
- 13. 是否有可能產生具有FPDF
- 14. 對於自己「產生輸入」的狀態機是否有特殊名稱?
- 15. MdiLayout不產生所需的輸出
- 16. 耳機拔出時是否有事件發生?
- 17. 列出yeoman中所有可用的子發電機
- 18. 確定產生的所有erlang進程是否空閒
- 19. Mersenne Twister發電機輸出的有效時間
- 20. 通過電子郵件發送Powershell腳本的所有輸出
- 21. 是否有可能強制Java將所有圖形輸出寫入FrameBuffer?
- 22. 從yeomon發電機到生產
- 23. 簡單:: XCOPY不生產輸出.bat
- 24. vexflow javascript產生沒有輸出
- 25. ssh host'history |尾巴'產生沒有輸出
- 26. 打印:生產沒有輸出
- 27. mongo find()產生沒有輸出與eval
- 28. 找出所有數組值是否爲空的簡單方法?
- 29. 簡單的Prolog發電機
- 30. 收集所有發生的錯誤/異常,並輸出它們
答案是**否**。 – 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