迭代器:
可以記住遍歷位置的對(duì)象枪眉,從集合的第一個(gè)元素開(kāi)始訪(fǎng)問(wèn),直到最后一個(gè)訪(fǎng)問(wèn)結(jié)束再层,迭代只能向前贸铜,不能向后。
一個(gè)類(lèi)實(shí)現(xiàn)iter和next即可認(rèn)為是迭代器聂受,通過(guò)iter()方法可以返回一個(gè)迭代器對(duì)象
class Fibonacci:
def __init__(self):
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
self.a, self.b = self.b, self.a+self.b
return self.a
生成器:
使用yield的函數(shù)即是生成器蒿秦,它也返回一個(gè)迭代器對(duì)象,只可進(jìn)行迭代操作蛋济。
運(yùn)行生成器過(guò)程中棍鳖,每次執(zhí)行到y(tǒng)ield時(shí),程序會(huì)暫停并保存運(yùn)行信息碗旅,并輸出yield的值渡处,待下次執(zhí)行next()時(shí),會(huì)從上次中止的位置繼續(xù)執(zhí)行
def gene_test(n):
a, b, i = 0, 1, 1
while i <= n:
a, b = b, a+b
yield a
i += 1
裝飾器:
在不改變被裝飾函數(shù)的基礎(chǔ)上祟辟,給被裝飾的函數(shù)添加額外的功能
裝飾器函數(shù)的入?yún)楸谎b飾函數(shù)的名字骂蓖,而后通過(guò)閉包函數(shù)裝飾被裝飾的函數(shù),裝飾器函數(shù)返回閉包函數(shù)的名稱(chēng)川尖;被裝飾的函數(shù)可使用語(yǔ)法糖的形式使用裝飾器
def deco_test(func):
def inner_test():
print("已被裝飾")
func()
return inner_test
@deco_test
def test():
print("我是原始函數(shù)返回的值")