python装饰器+用法详解
python装饰器是拓展函数功能的一种函数。能够在不修改函数的前提下对函数进行整体加工,能够有效的防止代码入侵。
给以下代码增加权限:
def test(num): print("-----test----%d" % num) return "ok" test(100)
修改后:
def test(num,level): if level == 1:
print("权限1") print("-----test----%d" % num) return "ok" test(100,1)
如果代码这样修改,就改变其原有结构,并且重新修改每一个调用的地方,不利于修改,也会对原有的代码产生一些意外的影响。
此时,就可以使用装饰器:
def set_privilege(level): def set_func(func): def call_func(*args, **kwargs): if level==1: print("权限1") if level==2: print("权限2") return func(*args, **kwargs) return call_func return set_func @set_privilege(1) def test(num): print("-----test1-----%d" % num) return "ok" @set_privilege(2) def test2(num): print("------test2------%d" % num) test(100) test2(200)
@set_privilege(1)相当于调用函数set_privilege传入实参1,拿到set_func的引用
再调用函数set_func装饰函数test
把函数test引用传入闭包,拿到函数call_func的引用
把函数call_func重新指向函数test。
也就是说,最后test(100)调用时不再直接指向原来的函数内存,而是通过装饰器 从函数set_privilge-->函数set_func-->函数call_func-->函数test,所以最终的test函数的功能会被改变。

浙公网安备 33010602011771号