Python 3中的max([a in [1,2]])和maxmax(a in [1,2]]之间的差异

时间:2020-10-19 13:24:28

标签: python python-3.x

我发现他们两个都将输出预期的结果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]))

谢谢。

1 个答案:

答案 0 :(得分:6)

这实际上是一个生成器表达式。生成器表达式可以使用参数列表中的();前提是它们是传递给函数的唯一参数。如果有更多参数,则需要使用一对自己的括号。

您可以通过快速测试来验证这一点:

def func(arg):
    print(type(arg))

func(n for n in range(10))  # Prints <class 'generator'>

来自PEP 289

该语法要求生成器表达式始终始终必须直接位于一组括号内,并且两边都不能有逗号。 。 。 。 [i]如果函数调用具有单个位置参数,则它可以是不带括号的生成器表达式,但是在所有其他情况下,都必须将其括起来。