如果乙個類想被用於for ... in迴圈,類似list或tuple那樣,就必須實現乙個__iter__()和__next__()方法,該方法返回乙個迭代物件
然後,python的for迴圈就會不斷呼叫該迭代物件的__next__()方法拿到迴圈的下乙個值,直到遇到stopiteration錯誤時退出迴圈
classfib(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():
(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 方法,如果都定義了,那麼這個物件就是可迭代物件。所以如果乙...