无法将打印语句放在生成器中

时间:2018-08-28 02:07:44

标签: python generator

这是怎么回事?后者为什么不起作用?

def foo(arg): print(arg)
for _ in (foo(x) for x in range(10)): pass   # Works
for _ in (print(x) for x in range(10)): pass # Doesn't work

1 个答案:

答案 0 :(得分:4)

它可以在Python 3.x中工作,但不能在Python 2.x中工作,因为print是Python 2.x中的一条语句,您不能在生成器表达式中放入一条语句。

如果您坚持要通过将print转换为Python 2.x中与Python 3兼容的函数来使其工作,请执行以下操作:

from __future__ import print_function

但是即使在Python 3.x中,也不建议在生成器表达式中放置一个始终返回None的函数,因为生成器是用来产生值的。