奇怪的python语法,这是如何工作的,它叫什么?

奇怪的python语法,这是如何工作的,它叫什么?,python,generator-expression,Python,Generator Expression,使用Python2.6 3把我甩了,这是我试图解释的事情 对于范围(4)中的i,生成循环4次的循环,在每个循环的开始处将i从0增加到3。[不知道3在这个上下文中是什么意思…]max()返回传递给它的最大iterable,并将结果打印到屏幕上。这计算结果为: print max(3 for i in range(4)) #output is 3 。。。这是一种复杂的方式,可以说print3 xs中x的expr是一个生成器表达式。通常,您会在expr中使用x。例如: print max([3,3,

使用Python2.6

3把我甩了,这是我试图解释的事情

对于范围(4)中的i,生成循环4次的循环,在每个循环的开始处将i从0增加到3。[不知道3在这个上下文中是什么意思…]max()返回传递给它的最大iterable,并将结果打印到屏幕上。

这计算结果为:

print max(3 for i in range(4))
#output is 3
。。。这是一种复杂的方式,可以说
print3

xs中x的expr是一个生成器表达式。通常,您会在
expr
中使用
x
。例如:

print max([3,3,3,3])

3 for i in range(4)
是一个生成器,它在一行中生成3到4次,并且
max
获取一个iterable并返回具有最高值的元素,很明显,这里是三个。

它可以重写为:

[2*i for i in range(4)] #=> [0, 2, 4, 6]
我希望这能使它的无意义更加明显。

表达:

nums = []
for i in range(4):
    nums.append(3)
print max(nums) # 3! Hurrah!
print max(3 for i in range(4))
正在打印应用于括号内内容的
max()
函数的结果。但是,在括号内,有一个生成器表达式创建类似于数组的内容,所有元素都等于
3
,但比表达式更有效:

nums = []
for i in range(4):
    nums.append(3)
print max(nums) # 3! Hurrah!
print max(3 for i in range(4))
它将创建一个
3
s数组,并在不再需要它后将其销毁

基本上:因为在括号内只创建相等的值,并且
max()
函数返回最大的值,所以不需要创建多个元素。由于元素数始终等于一,因此不需要使用
max()
函数,并且可以用以下代码有效地替换代码(至少在您给出的情况下):

print max([3 for i in range(4)])
这就是全部;)


要了解更多关于理解表达式和生成器表达式之间的差异,您可以访问这里。

出于某种原因,这个问题让我想起了Monty Python和圣杯。那么,3 there的意思是“为循环做3次”?看起来很奇怪,必须要做实验。不,3是每次循环循环时都要添加到列表中的内容。因此,对于范围(4)中的第一个数字,即0,添加数字3。。。然后,对于下一个数字,将数字3、下一个和下一个相加。所以你最终得到了一个四个三的列表。啊,这里是3,把它当作一个i'carear:实际上它的计算结果是:
printmax(iter([3,3,3,3]))
,因为它是一个生成器表达式,而不是列表理解。