Python Can';t将打印语句放入生成器中

Python Can';t将打印语句放入生成器中,python,generator,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 它可以在Python3.x中工作,但不能在Python2.x中工作,因为在Python2.x中,print是一条语句,不能将语句放入生成器表达式中 如果您坚持,您可以通过将print转换为

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

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

它可以在Python3.x中工作,但不能在Python2.x中工作,因为在Python2.x中,
print
是一条语句,不能将语句放入生成器表达式中

如果您坚持,您可以通过将
print
转换为Python 2.x中与Python 3兼容的函数,并使用:

from __future__ import print_function

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

您使用的是Python2.x吗
print
是一个语句,不能将语句放在生成器表达式中,只能放在其他表达式中。什么意思不起作用(Py3)-对我来说,prints
0..9
,但这是生成器的一个糟糕用法,你不应该这样做。如果您使用的是Py2,那么我测试了最后一行代码是否可以在Windows 10上的Python 3.6.6上运行。您的错误消息是什么?注意:如果来自未来导入打印函数的
生效,那么它在Python 2中也可以工作。不过,如果用生成器表达式来表示这样的副作用,那还是很糟糕的。答案是肯定的。