6
print max(3 for i in range(4))
#output is 3

使用 Python 2.6

3 让我失望,这是我试图解释发生了什么的尝试。

for i in range(4) 使循环循环 4 次,在每个循环开始时将 i 从 0 递增到 3。[不知道 3 在这种情况下意味着什么...] max() 返回传递给它的最大可迭代对象,并将结果打印到屏幕上。

4

4 回答 4

14

3 for i in range(4)是一个生成器,它连续四次产生 3,并max采用一个可迭代对象并返回具有最高值的元素,显然这里是 3。

于 2011-05-13T20:43:55.977 回答
11

这评估为:

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

...这是一种精心设计的说法print 3

expr for x in xs是一个生成器表达式。通常,您会使用xin expr。例如:

[2*i for i in range(4)] #=> [0, 2, 4, 6]
于 2011-05-13T20:43:03.853 回答
7

它可以重写为:

nums = []
for i in range(4):
    nums.append(3)
print max(nums) # 3! Hurrah!

我希望这让它的无意义更加明显。

于 2011-05-13T20:44:38.587 回答
3

表达方式:

print max(3 for i in range(4))

正在打印max()函数的结果,应用于括号内的内容。然而,在括号内,您有一个生成器表达式,它创建类似于数组的东西,所有元素都等于3,但比表达式更有效:

print max([3 for i in range(4)])

这将创建一个 s 数组3并在不再需要它后将其销毁。

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

print 3

这就是全部;)

要详细了解理解生成器表达式之间的差异,您可以访问此文档页面

于 2011-05-13T21:01:00.160 回答