函数装饰器

前面介绍的@classmethod和@staticmethod的本质就是函数装饰器,其中staticmethod和classmethod都是python的内置函数。

使用@符号引用已有的函数后,可用于修饰其他函数,装饰被修饰的函数。

@函数A   去修饰函数B 实际上步骤:

1.将函数B(被修饰函数)作为参数传给函数A

2.将函数B替换成第一步的返回值

def funA(fn):
    print('A')
    fn()
    return 'fkit'
@funA
def funB():
    print('B')
#funB
print(funB)

结果:
A
B
fkit


这里把funB传入funA

def auth(fn):
    def auth_fn(*args):
        print('-------模拟执行权限检查-------')
        fn(*args)
    return auth_fn
@auth
def test(a,b):
    print('执行test函数,a:%s,b:%s'%(a,b))

test(20,15)


结果:
-------模拟执行权限检查-------
执行test函数,a:20,b:15

上面使用@auth修饰了test()函数,这回使得test()函数被替换成auth()函数所返回的auth_fn函数,而auth_fn函数的执行流程是:1.先执行流程检查。2.回调被修饰的目标函数

简单就是添加了一个检查的功能。

原文地址:https://www.cnblogs.com/inuyashalove/p/12777839.html