2017-04-05 35 views
1

我是初學Python的編程人員,我需要知道這行代表什麼意思。我知道for循環在Python中的基本語法,但是這條線我不知道,我正在尋求一些專業人士在Python中幫助我。我花了一些時間來了解它:(For循環在Python中使用prop和屬性

for prop, value in ((p, v) for p, v in properties if v is not None): 
+1

的可能的複製[什麼是 「列表理解」 是什麼意思?它如何工作,如何使用它?](http://stackoverflow.com/questions/34835951/what-does-list-comprehension-mean-how-does-it-work-and-how-can-i -use-it) – McGrady

+0

這是一個for循環......你如何獨立運行每一塊? –

+0

這是一個圖像處理庫腳本中的python腳本...我想理解腳本實際做了什麼...它是否將2 for loop與properties結合起來? –

回答

2

((p, v) for p, v in properties if v is not None)

這是發電機的表達。它會產生一個發生器對象,每次輪詢時它將從列表properties中發出一對(p,v),跳過那些v爲無的對,直到它用完屬性。也就是說,它會發出每個設置了某個值的屬性值對。 「每個被查詢時間」只是意味着「每次有人問了next()對象」

for prop, value in some_collection:

這一再要求some_collection它的下一個對象,它最好是一對。該對的元素分別賦值爲propvalue,循環的主體被執行。

把它們放在一起,你可以看到,我們遍歷非空的屬性和他們採取一些行動(我們不知道什麼樣的行動,因爲我們沒有循環體)

我建議你首先查看列表理解和詞典理解,然後繼續理解生成器,因爲列表和詞典comps在概念上更簡單。

2

嘛,那肯定是一個班輪:

  1. for prop, value in這是一個標準的循環,將遍歷一個可迭代,如清單,字典(鍵)或元組
  2. ((p, v) for p, v in properties if v is not None):這用於inline for循環來過濾掉無值您可以看到只有通過if的項目才被保留然後我們並沒有修改元素((p, v) for p, v in properties。我們只是刪除價值所在的項目None
+2

其實,這不是一個列表理解。 Nitpicking,我知道,但差異是值得理解的。 –

+0

更新,謝謝。我只是看着差異。 – Neil

1

它是一個列表理解。您已提到它可以被分解爲以下這個特定的例子:

properties = {'prop1': 1, 'prop2':2, 'prop':3, 'prop4':None} 
for p, v in properties.iteritems(): 
    if v is not None: 
     print p, v 

輸出:

prop1 1 
prop2 2 
prop 3 
+2

這是一個生成器表達式,不是列表comp。微妙但重要的區別! –

+0

是分解編碼,包括前面的for循環?「for prop,value in」 –

+0

是的,它有代碼中的最後一個語句,'print p,v'不過是prop和v的值。 –

0

((p, v) for p, v in properties if v is not None)是發電機的表達。

爲簡單起見,讓我們假設屬性是一個帶元組(a,b)的列表。它不會改變太多

它在做什麼是:

  1. 考慮以下情況:pvproperties[0]被發現的順序元組(p, v)
  2. 如果v(發現於properties[0])不是None,則產生它。
  3. 重複properties[1]properties[2]等...直到properties[-1]

我的意思是'收益率'是這些實際上可以轉換成函數,使用關鍵字yield的函數。我不會解釋,而是給你下一個鏈接。


延伸閱讀: