1. 程式人生 > >迭代器,生成器與裝飾器

迭代器,生成器與裝飾器

迭代:類似於迴圈,每一次重複的過程被稱為一次迭代的過程,而每一次迭代得到的結果會被用來作為

下一次迭代的初始值,提供迭代方法的容器稱為迭代器,通常接觸的迭代器有序列(列表、元組、字串),

還有字典也是迭代器,都支援迭代的操作。

關於迭代,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]