我是初學Python的編程人員,我需要知道這行代表什麼意思。我知道for循環在Python中的基本語法,但是這條線我不知道,我正在尋求一些專業人士在Python中幫助我。我花了一些時間來了解它:(For循環在Python中使用prop和屬性
for prop, value in ((p, v) for p, v in properties if v is not None):
我是初學Python的編程人員,我需要知道這行代表什麼意思。我知道for循環在Python中的基本語法,但是這條線我不知道,我正在尋求一些專業人士在Python中幫助我。我花了一些時間來了解它:(For循環在Python中使用prop和屬性
for prop, value in ((p, v) for p, v in properties if v is not None):
((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
它的下一個對象,它最好是一對。該對的元素分別賦值爲prop
和value
,循環的主體被執行。
把它們放在一起,你可以看到,我們遍歷非空的屬性和他們採取一些行動(我們不知道什麼樣的行動,因爲我們沒有循環體)
我建議你首先查看列表理解和詞典理解,然後繼續理解生成器,因爲列表和詞典comps在概念上更簡單。
嘛,那肯定是一個班輪:
for prop, value in
這是一個標準的循環,將遍歷一個可迭代,如清單,字典(鍵)或元組((p, v) for p, v in properties if v is not None):
這用於inline for循環來過濾掉無值您可以看到只有通過if
的項目才被保留然後我們並沒有修改元素((p, v) for p, v in properties
。我們只是刪除價值所在的項目None
。其實,這不是一個列表理解。 Nitpicking,我知道,但差異是值得理解的。 –
更新,謝謝。我只是看着差異。 – Neil
它是一個列表理解。您已提到它可以被分解爲以下這個特定的例子:
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
這是一個生成器表達式,不是列表comp。微妙但重要的區別! –
是分解編碼,包括前面的for循環?「for prop,value in」 –
是的,它有代碼中的最後一個語句,'print p,v'不過是prop和v的值。 –
((p, v) for p, v in properties if v is not None)
是發電機的表達。
爲簡單起見,讓我們假設屬性是一個帶元組(a,b)的列表。它不會改變太多
它在做什麼是:
p
和v
在properties[0]
被發現的順序元組(p, v)
。v
(發現於properties[0]
)不是None
,則產生它。properties[1]
,properties[2]
等...直到properties[-1]
。我的意思是'收益率'是這些實際上可以轉換成函數,使用關鍵字yield
的函數。我不會解釋,而是給你下一個鏈接。
的可能的複製[什麼是 「列表理解」 是什麼意思?它如何工作,如何使用它?](http://stackoverflow.com/questions/34835951/what-does-list-comprehension-mean-how-does-it-work-and-how-can-i -use-it) – McGrady
這是一個for循環......你如何獨立運行每一塊? –
這是一個圖像處理庫腳本中的python腳本...我想理解腳本實際做了什麼...它是否將2 for loop與properties結合起來? –