装饰器其二

一、完全伪装:将装饰函数彻底伪装成原函数,即所有属性要与原函数一致。

from functools import wraps
def passer(func):
    @wraps(func)  # 将wrapper完全复制传入的func的所有属性
    def wrapper(*args, **kwargs):
        res = func(*args, **kwargs)
        return res
    return wrapper

二、有参装饰器:

  1、无参装饰器的组成由内相外:

    ①原函数(原功能,原调用,原返回值)

    ②装饰函数(传入参数,定义新功能,返回原返回值)

    ③传递函数(传入原函数名,返回装饰函数)

  2、有参装饰器在无参装饰器基础上增加:

    ④外函数(传入新功能所需参数,返回传递函数)

from functools import wraps
def outter(extra):
    def passer(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            print(extra)
            res = func(*args, **kwargs)
            return res
        return wrapper
    return passer
@outter('aaa')  # outter()等于outter的返回值passer,再  通过语法糖@实现了add=passer(add),传入的值可被里层extra取用
def add(a, b):
    print(a + b)

 

猜你喜欢

转载自www.cnblogs.com/caoyu080202201/p/12558585.html