函数进阶(二)

叠加装饰器

叠加装饰器:在同一个被装饰对象中,添加多个装饰器,并执行(装饰器在被装饰对象被调用时,才会执行添加的功能)

叠加装饰器:

​ 装饰顺序:由下而上,调用wrapper装饰器拿到返回值inner

​ 执行顺序:由上而下,调用装饰过后的返回值inner

ps:无论inner中出现任何判断,最后都要返回‘调用后的被装饰对象’func(*args,**kwargs)

有参装饰器

有参也可叫做三层闭包,装饰器后面加上括号传入参数(可以用作用户权限区分)

无参装饰器

装饰在被装饰对象时,没有传入参数的装饰器

wraps

作用:修复的是被装饰对象的空间

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;

优点:不依赖索引取值,占用内存小

缺点:一次只取一个值,要想调用前面的值,只能从新创建迭代对象或者从新调用iter,当两个循环同时使用一个迭代器时,只有一个能执行成功

我把月亮戳到天上 天就是我的 我把脚踩入地里 地就是我的 我亲吻你 你就是我的
原文地址:https://www.cnblogs.com/zhulipeng-1998/p/12863917.html