当使用自定义迭代器迭代一个小容器时,我遇到了看起来非常令人惊讶的性能差异.我希望有人能够帮助我理解这些差异的来源.
首先是一些背景; 我正在使用boost :: python编写一些python扩展模块,其中一个包含绑定到实现getitem的3d float向量类型.因为它有getitem它可以迭代它,但它似乎很慢,但它不明显为什么所以我决定在python中使用一些简单的自定义迭代器来更好地了解事情是如何工作的.这些迭代器来自哪里......
class MyIterator1(object):
__slots__ = ['values', 'popfn']
def __init__(self):
self.values = ['x', 'y', 'z']
self.popfn = self.values.pop
def __length_hint__(self):
return 3
def __iter__(self):
return self
def next(self):
try:
return self.popfn()
except IndexError:
raise StopIteration
class MyIterator2(object):
__slots__ = ['values', 'itfn']
def __init__(self):
self.values = ['x', 'y', 'z']
it = iter(self.values)
self.itfn = it.next
def __length_hint__(self):
return 3
def __iter__(self):
return self
def next(self):
return self.itfn()
class MyIterator3(object):
__slots__ = ['values', 'i']
def __init__(self):
self.values = …Run Code Online (Sandbox Code Playgroud)