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') |
由上可见,实际函数被包裹再装饰器里面,同时避免了功能函数侵入式
代码。