小编bab*_*bak的帖子

自定义迭代器性能

当使用自定义迭代器迭代一个小容器时,我遇到了看起来非常令人惊讶的性能差异.我希望有人能够帮助我理解这些差异的来源.

首先是一些背景; 我正在使用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)

python iterator

5
推荐指数
0
解决办法
768
查看次数

标签 统计

iterator ×1

python ×1