装饰器的作用就是在函数调用方法不变的情况下,把此函数包装成另一个函数来使用

假设我们要增强函数的功能,比如,在函数调用前后自动打印日志,但又不希望修改函数的定义,

这种在代码运行期间动态增加功能的方式,称之为“装饰器”

例如我现在需要写一个求和的函数

1
2
3
4
5
def svzSum(*args):
sum=0
for i in args:
sum+=i
return sum

我现在想要写一个log输出函数,来输出我们运行的函数的名字

1
2
3
4
5
def log(func):
def ptlog(*args):
print(func.__name__)
return func(*args)
return ptlog

那么我们的调用方式就应该是

1
2
a=log(svzSum)
print(a(1,2,3))

这种方式称之为闭包,python中提供了一一个更为简便的表示方法

1
2
3
4
5
6
@log
def svzSum(*args):
sum=0
for i in args:
sum+=i
return sum