【发布时间】:2015-01-14 18:50:03
【问题描述】:
我有以下代码:
import itertools
for c in ((yield from bin(n)[2:]) for n in range(10)):
print(c)
输出是:
0
None
1
None
1
0
None
1
1
None
...等为什么会出现Nones?如果我有:
def hmm():
for n in range(10):
yield from bin(n)[2:]
for c in hmm():
print(c)
然后我得到了我所期望的:
0
1
1
0
1
1
...等等。另外,有没有办法把它写成生成器表达式以获得与后者相同的结果?
【问题讨论】:
-
最好将您的示例更改为不使用无限循环的示例。为什么不将
itertools.count更改为range(10)之类的? -
来自docs:“此外,允许子生成器返回一个值,并且该值可供委托生成器使用。”
-
在你的第一个代码中,你混合了 python2 和 3 特定语法,你应该删除 print 语句并使其成为函数调用
-
@LudovicViaud:谢谢,已修复
-
@BrenBarn:那么我不一定需要发电机!我的用例是专门制作一个无限生成器
标签: python python-3.x generator yield generator-expression