前面介绍的@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.回调被修饰的目标函数
简单就是添加了一个检查的功能。