其实就是在不侵入原有代码的基础上添加新的功能的一种方法。
例如:
原有一个画圆的函数draw_circle:
def draw_cicle(r):
print("drawing...")
现在要在其基础上添加计算圆的周长的功能,最简单的办法就是修改原来这个draw_cicle函数,在他的内部添加代码,但是更好的办法是使用装饰器:
def new_fun(r, draw_cicle):
def inner():
L=2*pi*r
print("周长:",L)
draw_cicle()
return inner
draw_circle=new_func(2,draw_cicle)
draw_circle()
同时Python为装饰器提供了语法糖 @,它用在函数的定义处:
@new_func
def draw_cicle(r):
print("drawing...")
draw_cicle()
这样就省去了手动给draw_cicle重新赋值的步骤,可以直接调用draw_cicle()方法达到新增功能的效果。