python迭代器高階

2021-10-18 01:31:34 字數 3035 閱讀 4556

我們之前簡單的了解了一下迭代器,本篇,我們來看看迭代器具體的使用方法吧!

>>

> 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

"get_iter"的作用等同於「iter(lst)」,'for_iter '相當於next()依次獲取每個元素

乙個迭代器物件必須要有__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(

)print

("rang(7):"

,list

(range(7

)))print

("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

)]print

(lst)

因為迭代器的特點,數字在執行下面的列表解析之前沒有被讀入記憶體。只有執行了下面的列表解析之後,才有指定個數的元素被讀入記憶體,並組合成了乙個列表。

剛才的fibs類的物件有上線。下面弄個無上限的

>>

>

import itertools

>>

> c = itertools.count(start =1)

>>

>

next

(c)1

>>

>

next

(c)2..

....

.

引入標準庫 itertools,建立了從整數1開始直到無線的迭代器物件,此時記憶體中並沒有讀取無數多個整數,而是每次執行next函式之後才讀入了乙個。

我們之前使用迭代器讀取最後乙個元素之後,再次讀取會報錯。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...