这是怎么回事?后者为什么不起作用?
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
答案 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
的函数,因为生成器是用来产生值的。