Python學習筆記 迭代器和迭代器協議

2021-09-27 10:16:21 字數 2048 閱讀 4163

術語概念解釋

關於 for 迴圈

寫乙個迭代器

1、迭代器協議

迭代器協議是一種約定,即物件必須提供乙個__next__方法,執行該方法要麼返回迭代中的下一項,要麼丟擲乙個 stopiteration 異常,終止迭代。

2、迭代器(iterator)

迭代器是一種物件,一種可以被 next() 函式呼叫並不斷返回下乙個值的物件(即滿足迭代器協議)。有時這種物件也叫迭代器物件。

ps: 生成器都是迭代器物件

3、可迭代物件(iterable)

提供了__iter__方法的物件叫做可迭代物件(__iter__方法返回乙個迭代器物件)。可迭代物件都可以直接作用於for迴圈,如 list、dict、tuple等。

ps: 迭代器物件一定是可迭代物件,可迭代物件不一定是迭代器物件,但可迭代物件都可以通過呼叫__iter__方法轉化成迭代器物件

ps: 乙個迭代器物件只能遍歷一次,第二次遍歷時不會返回值,因為已經迭代完了

class

iter

(object):

def__init__

(self, x)

: self.x = x

def__iter__

(self)

:return self

# 只執行一次,返回乙個迭代器物件

def__next__

(self)

: self.x +=

1if self.x >10:

raise stopiteration

return self.x

# 多次執行,每次返回迭代的下一項

sample = iter(1)

print

(next

(sample)

)# 2

print

(next

(sample)

)# 3

print

(next

(sample)

)# 4

for i in sample:

print

(i, end=

' ')

# 5 6 7 8 9 10

for i in sample:

print

(i, end=

' ')

# 這裡什麼都沒有

for迴圈的本質是先呼叫 iter() 函式將可迭代物件轉化為乙個迭代器物件,然後每次迴圈呼叫一次 next() 函式,得到迭代的下一項。

# 例如下

class

iter

(object):

def__init__

(self, x)

: self.x = x

def__iter__

(self)

:return self

# 必須返回迭代器物件

def__next__

(self)

: self.x +=

1if self.x >10:

raise stopiteration

return self.x

# 返回迭代的下一項

sample = iter(1)

for i in sample:

print

(i, end=

' ')

print(''

)sample_1 = iter(1)

# for 迴圈的執行過程如下

iterable =

iter

(sample_1)

# 先利用 iter() 函式將可迭代物件轉化為迭代器物件

n =10

while n >1:

print

(next

(iterable)

, end=

' ')

# 然後不斷的用 next() 函式呼叫迭代器物件,以返回下乙個值

n = n-

1

python迭代器的作用 python的迭代器

迭代是指能夠從序列中訪問出素的一種方式,在我們遍歷使用for.in.的物件都是可迭代物件。這裡需要補充一點的是python中一切都是物件。判斷乙個物件是否是可迭代物件可以通過instance函式 像我們常用的列表,字典,字串,集合,元組都是可迭代物件。那麼我們是否可以自定義乙個可迭代物件呢,答案是肯...

python迭代器作用 python中的迭代器

python中有一類工具叫做迭代工具,它能從左至右掃瞄物件。這包括了for迴圈 列表解析 in成員關係測試以及map內建函式等。可以用在上述迭代工具環境中,通過一次次迭代不斷產生結果的物件稱為可迭代物件,即是iterable。實際上可迭代物件分為兩大類,一種是實際儲存的序列,即列表 元組,字串 另一...

python中的迭代器 Python中的迭代器漫談

問題是在python中進行迴圈的時候產生的,熟悉python的都知道,它沒有類似其它語言中的for迴圈,只能通過for in的方式進行迴圈遍歷。最典型的應用就是通過range函式產生乙個列表,然後用for in進行操作,如下 usr bin env python for i in range 10 ...