回答
在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