2013-05-29 107 views
3

Python有enumerate()在與index.I對象進行迭代懷疑口譯跟蹤的東西在哪裏的唯一目的是創造了很多INT對象。該PEP page說以下,但我真的不明白什麼是引擎蓋下回事:什麼是實現細節的枚舉?

它提供與iteritems()得到字典,以同樣的優勢,所有iterables - 一個緊湊的,可讀的,可靠的指標符號。

那麼,什麼是魔術嗎?

+0

Python中創造了很多'的int '對象*無處不在*,但會實現小值(-5到256範圍內的某個值)。 –

+0

@jamylak我是新來Ptyhon所以我有麻煩通過google搜索找到剛纔的源代碼。哪一個文件包含'enumerate'的源代碼? – Forethinker

+0

@Forethinker:http://hg.python.org/cpython/file/2.7/Objects/enumobject.c –

回答

7

enumerate()是一個迭代;它僅產生上飛索引int;它不會在前面產生它們。

你可以嘗試讀取enumobject.c source code,但它基本上可以被翻譯到Python這樣的:

def enumerate(iterable, start=0): 
    count = start 
    for elem in iterable: 
     yield count, elem 
     count += 1 

yield關鍵字使這一generator function,你需要循環發電機(或致電next()在其上),進入到產生數據,每次一個呼叫yield功能。

的Python也實習生int值,-5和256(含)是單身,所以上面的代碼,直到你達到257甚至不產生新的int對象之間的所有值

+0

編程語言的源代碼對我來說仍然有點令人望而生畏。任何一個刷過「產量」的人都會馬上得到這個結果。非常感謝Martijn! – Forethinker

2

它可以幫助你瞭解那裏的東西....

l = ['apple', 'banana', 'cabbage'] 

for idx, item in enumerate(l): 
    print "the item: %s, is at position %s" % (item, idx) 

>>> 
the item: apple, is at position 0 
the item: banana, is at position 1 
the item: cabbage, is at position 2 

這有助於在以下情況下..假設你想找到列表中的每個「白菜」的項目。並瞭解他們的指標。

l = ['apple', 'banana', 'cabbage', 'monkey', 'kangaroo', 'cabbage'] 

def find_indexes(lst, match): 
    results = [] 
    for idx, item in enumerate(l): 
     if item == match: 
      results.append(idx) 
    return results 

print find_indexes(l, 'cabbage') 

>>> 
[2, 5]