现有一段代码如下
def myprint(): print('python') myprint() myprint() 反复调用myprint()函数输出结果
python python ''''''''现在我们需要在每一行python前输出hello,但是不允许修改myprint函数, 我们就需要找到每一次调用,并在函数前填上print(‘hello’)语句,这样添加起来就会很麻烦,而且会错写漏写。这时候就需要引入装饰器,体现了装饰器的作用
def outer(func): def inner(): print('hello') func() return inner @outer def myprint(): print('python') myprint() myprint()执行结果
hello python hello python可以看到,在未改动myprint函数的情况下,使每一次调用myprint函数时,都输出了‘hello’,这就是装饰器的作用
上面为简单的没有参数的函数,下面展示有参数的情况如何使用装饰器
def myadd(a,b): print(a+b)需求:在每次输出结果前打印a,b的值
def outer(func): def inner(m,n): print('a = %d,b = %d'%(m,n)) return func(m,n) return inner @outer def myadd(a,b): print(a+b) myadd(1,5) myadd(1,5)执行结果如下
a = 1,b = 5 6 a = 1,b = 5 6小结:装饰器只有在不允许修改原先源码的情况下使用,如果可以修改源码的话,我们在源码上直接进行修改就行