迭代器,生成器與裝飾器
阿新 • • 發佈:2019-02-02
迭代:類似於迴圈,每一次重複的過程被稱為一次迭代的過程,而每一次迭代得到的結果會被用來作為
下一次迭代的初始值,提供迭代方法的容器稱為迭代器,通常接觸的迭代器有序列(列表、元組、字串),
還有字典也是迭代器,都支援迭代的操作。
關於迭代,python提供了兩個BIF:iter(), next()
對一個容器物件呼叫iter()就得到它的迭代器,呼叫next()迭代器就會返回下一個值,如果迭代器沒有值可以返回了,
python就會丟擲StopIteration的異常。
關於實現迭代器的魔法方法有兩個:__iter__() , __next__()
一個容器如果是迭代器,那就必須實現__iter__()魔法方法,這個方法實際上是返回迭代器本身,接下來重點是要實現
__next__()魔法方法,因為它決定了迭代的規則。
class MyIterator: #建立一個迭代器 def __init__(self,x=2,xmax=100): #建構函式 self.__mul,self.__x = x,x self.__xmax=xmax def __iter__(self): #迭代器的協議方法 return self #返回的是類本身 def __next__(self): if self.__x: self.__mul *=self.__x if self.__mul <= self.__xmax: return self.__mul else: raise StopIteration else: raise StopIteration if __name__ == '__main__': myiter=MyIterator() #例項化一個迭代器 for i in myiter: #迭代 print('迭代的元素為:',i)
迭代的元素為: 4
迭代的元素為: 8
迭代的元素為: 16
迭代的元素為: 32
迭代的元素為: 64
[Finished in 0.4s]
利用iter函式定義迭代器:
class Counter:
def __init__(self,x=0):
self.x=x
counter=Counter()
def used_iter():
counter.x+=2
return counter.x
for i in iter(used_iter,8):
print('本次遍歷的數值:',i)
本次遍歷的數值: 2 本次遍歷的數值: 4 本次遍歷的數值: 6 [Finished in 0.3s]