函数进阶(二)

叠加装饰器

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

叠加装饰器:app

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

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

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

有参装饰器

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

无参装饰器

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

wraps

做用:修复的是被装饰对象的空间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,当两个循环同时使用一个迭代器时,只有一个能执行成功

相关文章
相关标签/搜索