2011-05-13 44 views
6
print max(3 for i in range(4)) 
#output is 3 

使用Python 2.6奇怪的Python语法,这是如何工作的,它叫什么?

3在解释什么事情是扔我了,我的继承人尝试。

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

+6

出于某种原因,这个问题让我想起了巨蟒和圣杯。 – 2011-05-13 20:47:27

回答

9

这个计算结果为:

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

...这是一个精心制作的方式来表达print 3

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

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

+0

所以,那里的3意味着'为循环做3次'?看起来很奇怪,必须进行试验。 – jason 2011-05-13 20:49:05

+0

那么,3每当循环进行时,就会有什么被添加到列表中。因此,对于范围(4)中的第一个数字(0),添加数字3 ...,然后为下一个数字添加数字3,然后添加数字3。所以你最终得到四个三分的名单。 – Doug 2011-05-13 20:52:04

+0

ahhhh so'heres 3,把它当作我' – jason 2011-05-13 21:02:48

14
3 for i in range(4)

是发电机能产生连续3分四次并取max可迭代和具有最高值,这是很明显,三这里返回元素。

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

我希望这是它的无意义更明显:

5

它可以作为被改写。

2

表达:

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

在打印应用到什么是在括号max()函数的结果。然而,在你有发电机表述制定类似于等于3所有元素数组的东西,但括号比表达更有效的方式:

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

这将创造的3的数组,并摧毁它在不再需要之后。

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

print 3 

那简直是所有; )

要了解更多有关理解发电机表达之间的差异,您可以访问documentation page

相关问题