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

时间:2011-05-13 20:41:17

标签: python generator-expression

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

使用Python 2.6

3让我失望,继续我试图解释最新情况。

对于范围(4)中的i,

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

4 个答案:

答案 0 :(得分:14)

3 for i in range(4)是一个连续产生3次的生成器,max获取一个iterable并返回具有最高值的元素,显然这里有三个。

答案 1 :(得分:9)

评估结果为:

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

...这是一种详尽的说法print 3

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

[2*i for i in range(4)] #=> [0, 2, 4, 6]

答案 2 :(得分:5)

可以改写为:

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

我希望这会使其无意义变得更加明显。

答案 3 :(得分:2)

表达式:

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

打印max()函数的结果是否应用于括号中的内容。但是在括号中你有 generator 表达式创建类似于数组的东西,所有元素都等于3,但是比表达式更有效:

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

将创建3的数组并在不再需要它之后将其销毁。

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

print 3

这就是全部;)

要详细了解理解生成器表达式之间的差异,您可以访问documentation page