【发布时间】:2019-12-28 22:35:42
【问题描述】:
我很困惑为什么这段代码有效。在对 all() 的调用中,我可以使用看起来像代码的语法来生成列表理解,但除了参数列表的对之外没有任何括号。在参数列表之外执行相同的代码会导致语法错误。 在同一代码上调用 print 会导致创建生成器,但不使用 yield 或 (生成器理解括号)?
这种特殊语法是否仅适用于函数调用,还是我遗漏了什么?
all(i for i in range(1, 11))
# True
print(i for i in range(1, 11))
# the syntax is creating a generator?
# <generator object <genexpr> at 0x00000000CDD7CC00>
i for i in range(1,11)
# ^
# SyntaxError: invalid syntax
【问题讨论】:
-
all将采用可迭代对象,而生成器是可迭代对象。如果要打印,请使用print(*(i for i in range(1, 11)))之类的 arg 解包,或者更简洁地使用print(*range(1,11)) -
生成器表达式需要
(...),但当表达式是调用表达式的唯一参数时,您可以省略额外的括号。 -
另见文档中的Generator expressions。
标签: python syntax iterator generator