迭代器簡述

2021-09-28 23:30:07 字數 2356 閱讀 3731

迭代是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。

**list、tuple等都是可迭代物件,我們可以通過iter()函式獲取這些可迭代物件的迭代器。然後我們可以對獲取到的迭代器不斷使用next()函式來獲取下一條資料。**iter()函式實際上就是呼叫了可迭代物件的__iter__方法。

>>

> li =[11

,22,33

,44,55

]>>

> li_iter =

iter

(li)

>>

>

next

(li_iter)

11>>

>

next

(li_iter)

22>>

>

next

(li_iter)

33>>

>

next

(li_iter)

44>>

>

next

(li_iter)

55>>

>

next

(li_iter)

traceback (most recent call last)

: file ""

, line 1,in

stopiteration

>>

>

注意,當我們已經迭代完最後乙個資料之後,再次呼叫next()函式會丟擲stopiteration的異常,來告訴我們所有資料都已迭代完成,不用再執行next()函式了。

迭代器是用來幫助我們記錄每次迭代訪問到的位置,當我們對迭代器使用next()函式的時候,迭代器會向我們返回它所記錄位置的下乙個位置的資料。實際上,在使用next()函式的時候,呼叫的就是迭代器物件的__next__方法所以,我們要想構造乙個迭代器,就要實現它的__next__方法。但這還不夠,python要求迭代器本身也是可迭代的,所以我們還要為迭代器實現__iter__方法,而__iter__方法要返回乙個迭代器,迭代器自身正是乙個迭代器,所以迭代器的__iter__方法返回自身即可。

乙個實現了__iter__方法和__next__方法的物件,就是迭代器。

class

fibiterator

(object):

"""斐波那契數列迭代器"""

def__init__

(self, n)

:"""

:param n: int, 指明生成數列的前n個數

"""self.n = n

# current用來儲存當前生成到數列中的第幾個數了

self.current =

0# num1用來儲存前前乙個數,初始值為數列中的第乙個數0

self.num1 =

0# num2用來儲存前乙個數,初始值為數列中的第二個數1

self.num2 =

1def

__next__

(self)

:"""被next()函式呼叫來獲取下乙個數"""

if self.current < self.n:

num = self.num1

self.num1, self.num2 = self.num2, self.num1+self.num2

self.current +=

1return num

else

:raise stopiteration

def__iter__

(self)

:"""迭代器的__iter__返回自身即可"""

return self

if __name__ ==

'__main__'

: fib = fibiterator(10)

for num in fib:

print

(num, end=

" ")

可以使用 isinstance() 判斷乙個物件是否是 iterable 物件:

in [50]

:from collections import iterable

in [51]

:isinstance([

], iterable)

out[51]

:true

簡述Python迭代器

物件必須提供乙個next方法,執行方法要麼返回迭代器的下一項,要麼就引起乙個stopiteration異常,以終止迭代。協議是一種約定,可迭代物件實現了迭代器協議,python的內部工具 如for迴圈,sum min max函式等 使用迭代器協議訪問物件。實現了迭代器協議的物件叫可迭代物件,滿足以下...

迭代器,生成器,裝飾器簡述

它是指對函式執行過程,做一些擴充套件,甚至可以更改本身函式的執行,它就是在不改變原始碼的情況下,給它新增新的功能 python提供的內建裝飾器有?classmethod修飾類函式,可以由物件和類呼叫,在類函式中,有乙個 引數,如果使用類函式執行,引數指這個類。如果使用物件.類函式執行,函式指物件的型...

迭代器與生成器(python)簡述

迭代是python最強大的功能之一,是訪問集合元素的一種方式。迭代器是乙個可以記住遍歷的位置的物件。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。迭代器有兩個基本的方法 iter 和next 字串,列表或元組物件都可用於建立迭代器 在 python 中,使...