开发必备知识点--装饰器的修复技术
我们之前学过的装饰器就函数嵌套加闭包。
怎样获取函数名?有个__name__方法
1 def f1(): 2 print('f1') 3 4 def f2(): 5 print('f2') 6 7 8 print(f1.__name__) 9 print(f2.__name__) 10 11 输出: 12 f1 13 f2
通过装饰器修饰后呢?
1 def wraper(func): 2 def inner(*args,**kwargs): 3 return func(*args,**kwargs) 4 return inner 5 6 @wraper 7 def f1(): 8 print('f1') 9 @wraper 10 def f2(): 11 print('f2') 12 13 14 print(f1.__name__) 15 print(f2.__name__)
输出结果
1 inner 2 inner
结果都是inner,因为他已经修饰了,虽然我们调用到方式还是f1。但那只是对外的一种显示,内部还是真正执行的函数inner.这也不是什么错,可我们不想这样。
通过装饰器修复技术,就可以解决这种问题。
from functools import wraps def wraper(func): @wraps(func) # 关键代码 def inner(*args, **kwargs): return func(*args, **kwargs) return inner