迭代器:
可以记住遍历位置的对象,从集合的第一个元素开始访问,直到最后一个访问结束,迭代只能向前,不能向后。
一个类实现iter和next即可认为是迭代器,通过iter()方法可以返回一个迭代器对象
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的函数即是生成器,它也返回一个迭代器对象,只可进行迭代操作。
运行生成器过程中,每次执行到yield时,程序会暂停并保存运行信息,并输出yield的值,待下次执行next()时,会从上次中止的位置继续执行
def gene_test(n):
a, b, i = 0, 1, 1
while i <= n:
a, b = b, a+b
yield a
i += 1
装饰器:
在不改变被装饰函数的基础上,给被装饰的函数添加额外的功能
装饰器函数的入参为被装饰函数的名字,而后通过闭包函数装饰被装饰的函数,装饰器函数返回闭包函数的名称;被装饰的函数可使用语法糖的形式使用装饰器
def deco_test(func):
def inner_test():
print("已被装饰")
func()
return inner_test
@deco_test
def test():
print("我是原始函数返回的值")