python装饰器

python装饰器可以理解为函数作为另外函数的参数

这是函数式编程的特征

举个例子:

def star(func):
    print("star")
    def inner(*args, **kwargs):
        print("*" * 30)
        func(*args, **kwargs)
        print("*" * 15)
    return inner

def percent(func):
    print("percent")
    def inner(*args, **kwargs):
        print("%" * 30)
        func(*args, **kwargs)
        print("%" * 15)
    return inner

@star
@percent
def printer(msg,msg2):
    print(msg,msg2)
printer("Hello","World")
percent
star
******************************
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Hello World
%%%%%%%%%%%%%%%
***************

从上面的执行过程可以看出,函数调用过程

@star
@percent
def printer(msg,msg2):
    print(msg,msg2)
相当于
def printer(msg):
    print(msg)
printer = star(percent(printer))

如果调整装饰器位置,执行顺序也会相应改变

@percent
@star
def printer(msg,msg2):
    print(msg,msg2)
printer("Hello","World")
star
percent
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
******************************
Hello World
***************
%%%%%%%%%%%%%%%

  

  



  

原文地址:https://www.cnblogs.com/idvcn/p/8571674.html