做效率优化的时候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