我們之前簡單的了解了一下迭代器,本篇,我們來看看迭代器具體的使用方法吧!
"get_iter"的作用等同於「iter(lst)」,'for_iter '相當於next()依次獲取每個元素>>
> lst[1
,2,3
,4]>>
>
import dis #引入標準庫dis,用它觀察for迴圈的細節。
>>
> dis.dis(
"for i in lst:pass")1
0 setup_loop 12
(to 14
)2 load_name 0
(lst)
4 get_iter
>>
6 for_iter 4
(to 12
)8 store_name 1
(i)10 jump_absolute 6
>>
12 pop_block
>>
14 load_const 0
(none
)16 return_value
乙個迭代器物件必須要有__iter__
和__next__
方法。據此,如果在類中定義這兩個方法,就可以定義迭代器物件(型別)了。
執行效果如下class
myrange
:def
__init__
(self,n)
: self.i=
1#初始i=1 意思就是從1開始啦~
self.n=n
def__iter__
(self)
:return self
def__next__
(self)
:if self.i <= self.n:
i = self.i
self.i+=
1return i
else
:raise stopiteration(
("rang(7):"
,list
(range(7
("myrange(7):"
,[i for i in myrange(7)
])
例項:編寫斐波那契數列。rang(7)
:[0,
1,2,
3,4,
5,6]
myrange(7)
:[1,
2,3,
4,5,
6,7]
斐波那契數列,又稱**分割數列,指的是這樣乙個數列:0、1、1、2、3、5、8、13、21、34、……在數學上,斐波納契數列以如下被以遞迴的方法定義:f(0)=0,f(1)=1,f(n)=f(n-1)+f(n-2)(n≥2,n∈n*)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用。特別指出:第0項是0,第1項是第乙個1。
這個數列從第3項開始,每一項都等於前兩項之和。
因為迭代器的特點,數字在執行下面的列表解析之前沒有被讀入記憶體。只有執行了下面的列表解析之後,才有指定個數的元素被讀入記憶體,並組合成了乙個列表。class
fibs
:def
__init__
(self,
max)
:#初始化
self.
max=
max
self.a=
0
self.b=
1def
__iter__
(self)
:return self
def__next__
(self)
: fib = self.a
if fib>self.
max:
raise stopiteration(
) self.a,self.b = self.b,self.a+self.b
return fib
fibs=fibs(
10000
)lst =
[fibs.__next__(
)for i in
range(10
(lst)
剛才的fibs類的物件有上線。下面弄個無上限的
引入標準庫 itertools,建立了從整數1開始直到無線的迭代器物件,此時記憶體中並沒有讀取無數多個整數,而是每次執行next函式之後才讀入了乙個。>>
>
import itertools
>>
> c = itertools.count(start =1)
>>
>
next
(c)1
>>
>
next
(c)2..
....
.
我們之前使用迭代器讀取最後乙個元素之後,再次讀取會報錯。itertools.cycle可以打破則個限制
>>
> c = itertools.cycle([1
,2,3
])>>
>
next
(c)1
>>
>
next
(c)2
>>
>
next
(c)3
>>
>
next
(c)1
>>
>
next
(c)2
python高階特性 迭代器
本文 廖雪峰的官方 我們已經知道,可以直接作用於for迴圈的資料型別有以下幾種 一類是集合資料型別,如list tuple dict set str等 一類是generator,包括生成器和帶yield的generator function。這些可以直接作用於for迴圈的物件統稱為可迭代物件 ite...
python 函式高階 迭代器
迭代 可以理解成迴圈,迭代一次,迴圈一次 根據所學知識我們知道,直接作用於for迴圈的資料型別有 一是集合資料型別,如str list,tuple,dict,set等 一類是generator,如,生成器和帶yield的generator function 這些可以直接作用於for迴圈的物件統稱為可...
Python高階 可迭代物件和迭代器
collections模組 總結 1 list 列表 例如 執行結果 2 set 元組 例如 執行結果 3 tuple 集合 例如 執行結果 4 dict 字典 例如 執行結果 5 str 字串 例如 執行結果 6 generator 生成器 例如 執行結果 ps 生成器是典型的迭代器。能夠被nex...