Python装饰器

装饰器的主要作用就是装饰,可以避免功能函数中出现侵入式代码,降低部分函数的耦合度的同时提高函数的通用性

柯里化

z = f(x,y) 转换为z=f(x)(y)

柯里化例子:

# 原函数
def add(x,y):
    return x + y 
# 柯里化
def add(x):
    def _add(y):
        return x + y
    return _add
# 嵌套函数,注意外层函数返回的是一个函数对象,还可以进行调用
num = add(4)
ret = num(3)  # 该操作相当于3+4
# 等价下面的写法
ret = add(3)(4)

示例

def logger(fn):
"""
接受一个函数对象,返回一个函数对象
"""
    def _logger(*args, **kwargs):
        print("Function {} Start...".format(fn.__name__))    # 打印函数开始执行日志
        ret = fn(*args, **kwargs)    # 开始执行函数
        # 注意这里是执行fn
        print("Function {} End.".format(fn.__name__))    # 函数结束
        return ret    # 返回函数执行后的结果
        # 此处不管原函数是否返回最好return一下,哪怕就只有一个None

@logger    # 该操作等价于  add = logger(add)
def add(x, y):
    return x + y

# 调用函数
sum = add(4 , 5)
print(sum)
# 执行结果为
# Function Start...
# Function End.
# 9

总结

装饰器顾名思义是对函数起装饰增强的作用,我们把需要增强的函数add比作为一幅画,装饰函数logger比作为黄框。如下:

名称组件
亚克力板print('Function Start')
画布ret=fn(args, *kwargs)
背板print('Function End')

由上可见,实际函数被包裹再装饰器里面,同时避免了功能函数侵入式代码。

Last modification:June 10th, 2020 at 11:37 am
If you think my article is useful to you, please feel free to appreciate