做效率優化的時候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
python 迭代器 python迭代器
迭代器 可以直接作用for迴圈的資料型別 我們已經知道,可以直接作用for迴圈的資料型別有以下幾種 一類是集合資料型別 如 list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function 可迭代物件定義 這些可以直接作用fo...
python的迭代器 Python 迭代器
迭代器 迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。可迭代物件 以直接作用於 for 迴圈的資料型別有以下幾種 一類是集合資料型別,如 list tuple dict set str 等...
python的迭代器 python 迭代器
在介紹迭代器之前,先說明下迭代的概念 迭代 通過for迴圈遍歷物件的每乙個元素的過程。python的for語法功能非常強大,可以遍歷任何可迭代的物件。在python中,list tuple string dict set bytes都是可以迭代的資料型別。可以通過collections模組的iter...