Python3中max([1,2]]中的a表示a)和max([1,2]中的a表示a)之间的差异
我发现它们都将输出预期结果Python3中max([1,2]]中的a表示a)和max([1,2]中的a表示a)之间的差异,python,python-3.x,Python,Python 3.x,我发现它们都将输出预期结果2 max([1,2]]中的a代表a)是max()+列表理解,一个简单的方法 max(a代表[1,2])是max()+?。它为什么有效?对于[1,2]中的a,我们如何命名结构a 生成器的形式为(A表示[1,2]中的A])。我怀疑(a代表[1,2]中的a])内部max(a代表[1,2]中的a])是一个生成器。但是,如果是这样,为什么可以忽略一对()?从技术上讲,它应该是max((a表示[1,2]中的a)) 谢谢。这实际上是一个生成器表达式。生成器表达式可以使用参数
2
是max([1,2]]中的a代表a)
+max()
,一个简单的方法列表理解
是max(a代表[1,2])
+max()
。它为什么有效?对于[1,2]中的a,我们如何命名结构?
a
(A表示[1,2]中的A])
。我怀疑(a代表[1,2]中的a])
内部max(a代表[1,2]中的a])
是一个生成器。但是,如果是这样,为什么可以忽略一对()
?从技术上讲,它应该是max((a表示[1,2]中的a))
谢谢。这实际上是一个生成器表达式。生成器表达式可以使用参数列表中的
()
;假设它们是传递给函数的唯一参数。如果有更多参数,它们需要自己的一对括号
您可以通过快速测试来验证这一点:
def func(arg):
print(type(arg))
func(n for n in range(10)) # Prints <class 'generator'>
def func(arg):
打印(类型(arg))
func(n表示范围(10)中的n))#打印
发件人: 语法要求生成器表达式始终需要直接位于一组括号内,并且两边不能有逗号。[一] 如果函数调用只有一个位置参数,则它可以是不带括号的生成器表达式,但在所有其他情况下都必须将其括起来
如果将
max
替换为print
,实际上很容易找到它是什么。您的python版本是什么?这似乎是一个从那时起修复的错误:这是否回答了您的问题@nocibambi如果它是一个单参数,那就不是一个bug。@nocibambi这个bug允许多参数调用没有自己的对:“Python 3.5现在正确地引发了一个语法错误,因为生成器表达式如果不是函数的唯一参数,就必须放在括号中。”