Python 有enumerate()
使用索引迭代对象。我怀疑解释器创建大量 int 对象的唯一目的是跟踪事物的位置。这政治公众人物页面 http://www.python.org/dev/peps/pep-0279/说了以下内容,但我不太明白幕后发生的事情:
它为所有可迭代对象提供了与 iteritems() 为字典提供的相同优势——紧凑、可读、可靠的索引表示法。
那么这里有什么魔力呢?
enumerate()
是一个迭代器;它只产生索引int
value 在飞行中;它不会预先生成所有这些内容。
您可以尝试阅读enumobject.c源代码 http://hg.python.org/cpython/file/2.7/Objects/enumobject.c,但它基本上可以像这样翻译成Python:
def enumerate(iterable, start=0):
count = start
for elem in iterable:
yield count, elem
count += 1
The yield
关键字使其成为生成器函数 http://docs.python.org/2/reference/expressions.html#yield-expressions,并且您需要循环生成器(或调用next()
上)以推进生成数据的功能,一yield
一次打电话。
Python也实习生int
值,-5 到 256(含)之间的所有值都是单例,因此上面的代码甚至不会产生新的int
对象,直到达到 257。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)