可迭代物件 iter 和 next

2022-06-25 13:42:14 字數 761 閱讀 7111

如果乙個類想被用於for ... in迴圈,類似list或tuple那樣,就必須實現乙個__iter__()和__next__()方法,該方法返回乙個迭代物件

然後,python的for迴圈就會不斷呼叫該迭代物件的__next__()方法拿到迴圈的下乙個值,直到遇到stopiteration錯誤時退出迴圈

class

fib(object):

def__init__

(self):

self.a, self.b = 0, 1 #

初始化兩個計數器a,b

def__iter__

(self):

return self #

例項本身就是迭代物件,故返回自己

def__next__

(self):

self.a, self.b = self.b, self.a + self.b #

計算下乙個值

if self.a > 100000: #

退出迴圈的條件

raise

stopiteration()

return self.a #

返回下乙個值

for n in

fib():

print

(n)

#輸出:1

#輸出:1

#輸出:2

#輸出:3

#輸出:5

#輸出:...

#輸出:46368

#輸出:75025

魔法函式 iter 和 next

通過iter 函式可以將有迭代能力的物件轉化成迭代器 可以通過collections類判斷乙個物件是iterable還是iterator from collections import iterable,iterator 常見的iterable list,dict a 1,2,4,5 isinsta...

迭代器和可迭代物件

本篇文章簡單談談可迭代物件,迭代器和生成器之間的關係。三者簡要關係圖 可迭代物件與迭代器 剛開始我認為這兩者是等同的,但後來發現並不是這樣 下面直接丟擲結論 1 可迭代物件包含迭代器。2 如果乙個物件擁有 iter 方法,其是可迭代物件 如果乙個物件擁有next方法,其是迭代器。3 定義可迭代物件,...

可迭代物件和迭代器

建立這個物件的類中是否定義了 iter 方法,如果定義了,那麼這個物件就是可迭代物件。isinstance obj,iterable 判斷 判斷乙個物件是不是迭代器的時候,需要判斷建立這個例項物件的類中是否定義了 iter 方法和 next 方法,如果都定義了,那麼這個物件就是可迭代物件。所以如果乙...