python迭代器内部效率优化

在进行Python迭代器效率优化时,发现一个关键点:迭代器内部调用的数据与迭代主体在同一命名空间能显著提高效率,可能原因是减少了查找变量时的解引用开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

做效率优化的时候get到了奇怪的姿势…
迭代器内部频繁调用的数据最好与迭代主体在同一命名空间下
这能极大的提高迭代效率

原理尚未明确, 怀疑是由于python在查找变量时解引用的开销造成的

#coding=utf8


class test_loop:
    def __init__(self, n):
        self._i = 0
        self._n = n

    def __iter__(self):
        for self._i in reversed(range(self._n)):
            yield self._i

class test_loop1:
    def __init__(self, n):
        self.i = 0
        self.n = n

    def __iter__(self):
        for self.i in reversed(range(self.n)):
            yield self.i

class test_loop2:
    def __init__(self, n):
        self.i = 0
        self.n = n

    def __iter__(self):
        n = self.n
        for i in reversed(range(n)):
            yield i

if __name__ == '__main__':
    import datetime

    tic = datetime.datetime.now()

    n = 100000000

    tester = [test_loop(n), test_loop1(n), test_loop2(n), reversed(range(n))]

    for item in tester:
        print()
        tic = datetime.datetime.now()
        for i in item:
            pass
        print(datetime.datetime.now() - tic)
0:00:15.918220

0:00:15.805681

0:00:07.884878

0:00:03.350308
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值