《Python学习之路 -- Python基础之装饰器》

  装饰器,本质上是一个函数,更加直观的说,装饰器就是等于 高阶函数 + 函数嵌套 + 闭包 ,装饰器是具有某个基础功能的函数,这种功能可以加成到其他函数上,使得其他函数的功能更加强大。除此以外,装饰器还有两个重要的特征:1、不改变被修饰函数的调用方式  2、不改变被修饰函数的源码 ,也就是说,装饰器就是在这两个特征上改造其他函数的函数。

高阶函数是指函数接收的参数是函数或者函数的返回值是函数,这样的函数就是高阶函数。

函数嵌套就是函数里面还定义了函数,可以嵌套多层。

函数闭包是指函数内部的函数使用了外部函数的局部变量。

# 外层包裹器,用于接收被修饰的函数
def wrapper(fun):
    # 内层函数,用于为被修饰的函数添加基本功能
    def inner(*args,**kwargs):
        # 基本功能代码
        # 调用被装饰的函数,并接收返回值
        result = fun(*args,**kwargs)
        # 将接收的结果返回
        return result
    # 相当于对外暴露内层函数
    return inner

@wrapper  # 等价于:foo = wrapper(foo)
def foo(a,b,c=3):print('foo',a,b,c)
   @wrapper
def bar():print('bar') # 直接调用,没有改变被修饰函数的调用方式 foo(1,2) bar()

如果包裹器还有需要要传参数,则可以在包裹器的外面继续套一层函数

猜你喜欢

转载自www.cnblogs.com/jonas-von/p/8979592.html