我发现他们两个都将输出预期的结果2
。
max([a for a in [1,2]])
是max()
+ list comprehension
,很简单。
max(a for a in [1,2])
是max()
+ ?
。为什么行得通?我们将结构命名为a for a in [1,2]
是什么?
生成器的形式为(a for a in [1,2])
。我怀疑(a for a in [1,2])
内部的max(a for a in [1,2])
是一个生成器。但是,如果是这种情况,为什么可以忽略一对()
?从技术上讲,它应该是max((a for a in [1,2]))
。
谢谢。
答案 0 :(得分:6)
这实际上是一个生成器表达式。生成器表达式可以使用参数列表中的()
;前提是它们是传递给函数的唯一参数。如果有更多参数,则需要使用一对自己的括号。
您可以通过快速测试来验证这一点:
def func(arg):
print(type(arg))
func(n for n in range(10)) # Prints <class 'generator'>
来自PEP 289:
该语法要求生成器表达式始终始终必须直接位于一组括号内,并且两边都不能有逗号。 。 。 。 [i]如果函数调用具有单个位置参数,则它可以是不带括号的生成器表达式,但是在所有其他情况下,都必须将其括起来。