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() 返回传递给它的最大可迭代对象,并将结果打印到屏幕上。
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() 返回传递给它的最大可迭代对象,并将结果打印到屏幕上。
3 for i in range(4)
是一个生成器,它连续四次产生 3,并max
采用一个可迭代对象并返回具有最高值的元素,显然这里是 3。
这评估为:
print max([3,3,3,3])
...这是一种精心设计的说法print 3
。
expr for x in xs
是一个生成器表达式。通常,您会使用x
in expr
。例如:
[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
,但比表达式更有效:
print max([3 for i in range(4)])
这将创建一个 s 数组3
并在不再需要它后将其销毁。
基本上:因为在括号内您将只创建相等的值,并且max()
函数返回最大的值,所以您不需要创建多个元素。因为元素的数量总是等于一,所以max()
不需要该函数,并且您的代码可以被以下代码有效地替换(至少在您给出的情况下):
print 3
这就是全部;)
要详细了解理解和生成器表达式之间的差异,您可以访问此文档页面。