2015-01-14 20 views
1

這是一個非常小的觀點,但很高興知道。 我期待簡化一些報告的代碼通常是這樣的:由__str __()觸發的Python訪問計數生成器?

i = 0 
for e in clist: 
    log.info(u'Processing record {:,} of {:,}.'.format(i, len(clist))) 
    i += 1 
    # ... do something 

醜了一點吧?

有一個內置類,將產生下一個整數,這樣我就可以做到這一點:

i = IntegerGenerator(0) 
for e in clist: 
    log.info(u'Processing record {:,} of {:,}.'.format(i, len(clist))) 
    # ... do something 

或者我應該只是通過定義一個定製__str__方法發電機寫自己? 無可否認,整個問題是擺脫i += 1

+0

我需要它來計算它被「使用」了多少次。在這種情況下,使用意味着有人問它是一個字符串。 – Colin

回答

4

您正在尋找enumerate() function

for i, e in enumerate(clist): 
    log.info(u'Processing record {:,} of {:,}.'.format(i, len(clist))) 

enumerate()產生具有(index, item)元組在傳入的序列項。

如果你需要創建計數名單的獨立,你可以使用itertools.count();每次你傳遞一個count()對象的next() function它會在系列產生下一個值:

from itertools import count 

i = count() 

for e in clist: 
    if some_condition: 
     log.info(u'Processing record {:,} of {:,}.'.format(next(i), len(clist))) 

現在i每次some_condition爲真纔會增加。

+0

啊,我明白了。謝謝! – Colin