For*_*ker 4 python heap loops allocation enumerate
Python必须enumerate()使用索引迭代对象.我怀疑解释器创建了很多int对象,其唯一目的是跟踪事物的位置.该PEP页说以下,但我真的不明白什么是引擎盖下回事:
它为所有迭代提供了iteritems()为字典提供的相同优势 - 一种紧凑,可读,可靠的索引符号.
那么这里的魔力是什么?
Mar*_*ers 11
enumerate()是一个迭代器; 它仅产生的索引int值的飞行 ; 它不会预先产生它们.
您可以尝试阅读enumobject.c源代码,但它基本上可以像这样翻译成Python:
def enumerate(iterable, start=0):
count = start
for elem in iterable:
yield count, elem
count += 1
Run Code Online (Sandbox Code Playgroud)
该yield关键字使这一发生器功能,你需要循环发电机(或称next()上),进入到生产数据,一个函数yield在一个时间通话.
Python也是实习int值,-5到256(含)之间的所有值都是单例,所以上面的代码甚至int在你达到257之前都不会产生新的对象.