最佳答案
下面的行为对我来说似乎有点违反直觉(Python 3.4) :
>>> [(yield i) for i in range(3)]
<generator object <listcomp> at 0x0245C148>
>>> list([(yield i) for i in range(3)])
[0, 1, 2]
>>> list((yield i) for i in range(3))
[0, None, 1, None, 2, None]
最后一行的中间值实际上并不总是 None
,它们是我们 send
到生成器的值,等价于(我猜想)下面的生成器:
def f():
for i in range(3):
yield (yield i)
我觉得很有趣,这三句台词居然一点用都没有。参考文献说 yield
只能在函数定义中使用(尽管我可能读错了,或者它只是从旧版本复制过来的)。前两行在 Python 2.7中生成 SyntaxError
,但是第三行不生成。
而且,这看起来很奇怪
有人能提供更多信息吗?