2013-06-30 53 views
2
n = 4 
v = [16, 19, 23, 28] 
w = [2, 3, 4, 5] 

idxs = list(range(n)) 
idxs.sort(key=lambda i: v[i]/w[i], reverse=True) 

objs = ((v[i], w[i]) for i in idxs[m:]) 
for av, aw in objs: 
    print av 
    print aw 

我遇到了上面的代碼塊。如果m = 2,則返回23 4 28 5.我想知道下面指出的代碼行是如何在Python中工作的,這是函數調用嗎?或者是什麼?。你會指向我的Python 2.7手冊來解釋這個功能嗎?我很想爲這個問題需要一個更好的標題,但我不知道如何命名它,有什麼建議?瞭解Python代碼----- objs =((v [i],w [i])for i in idxs [m:])

objs = ((v[i], w[i]) for i in idxs[m:]) 
+0

這是一臺發電機理解 –

+0

的代碼是有點低效率的,因爲它可以將在整數不止一次。 –

回答

4

這是一個generator expression,有時也稱爲generator comprehension。代碼的最後四行是基本上等同於

for i in idxs[m:]: 
    av, aw = v[i], w[i] 
    print av 
    print aw 
+0

真棒,我可以理解1s中的這段代碼!感謝您的鏈接! – twfx

+0

PEP稱他們爲['generator expressions'](http://www.python.org/dev/peps/pep-0289/) – ovgolovin

+0

@ovgolovin:感謝您的提示!與這個問題和SO問題相關聯 –

相關問題