def set_func(func): # print('装饰器开始装饰了...') def call_func(num): print('....权限1.....') print('....权限2.....') func(num) return call_func @set_func # 等价于 test1 = set_func(test1) def test1(num): print(".......这是test1......%d" % num) test1(100) test1(200) # 一个装饰器可以装饰多个函数,并不是函数调用时才装饰,可以在去掉函数调用验证 # 每装饰一个函数,就会生成一个闭包空间,会生成一个局部变量用来存储原来函数指向的地址,跟类生成一个实例对象类似 ''' 必须使用闭包才能将对test1原指向保存下来 def set_func(func,num): a = func print('....权限1.....') print('....权限2.....') a(num) # 等价于 test1 = set_func(test1) def test1(num): print(".......这是test1......%d" % num) test1 = set_func(test1,100) test1(100) test1(200) '''