叠加装饰器:在同一个被装饰对象中,添加多个装饰器,并执行(装饰器在被装饰对象被调用时,才会执行添加的功能)闭包
叠加装饰器:app
装饰顺序:由下而上,调用wrapper装饰器拿到返回值inner函数
执行顺序:由上而下,调用装饰事后的返回值innercode
ps:不管inner中出现任何判断,最后都要返回‘调用后的被装饰对象’func(*args,**kwargs)对象
有参也可叫作三层闭包,装饰器后面加上括号传入参数(能够用做用户权限区分)索引
装饰在被装饰对象时,没有传入参数的装饰器内存
做用:修复的是被装饰对象的空间it
from functools import wraps def wrapper(func): @wraps(func) # 修更名称空间: inner ---》 func def inner(*args, **kwargs): ''' 此处是装饰器的注释 :param func: :return: ''' res = func(*args, **kwargs) return res return inner # ---》 func @wrapper def index(): ''' 此处是index函数的注释 :return: ''' pass # print(index) # 函数对象 # # # 函数对象.__doc__: 查看函数内部的注释 index() print(index.__doc__) # inner.__doc__
原理:内置--iter--都是可迭代对象,加上next取值就是迭代器,迭代器不依赖索引取值,每次只取一个值而且停顿,内存里面只存一个值,若是想要获取前面的值,只能重新执行iter;class
优势:不依赖索引取值,占用内存小
缺点:一次只取一个值,要想调用前面的值,只能重新建立迭代对象或者重新调用iter,当两个循环同时使用一个迭代器时,只有一个能执行成功