python中,装饰器函数的功能:在不改变原函数的情况下,为原函数添加新功能。核心原理是,定义一个包含内嵌函数装饰函数,装饰函数的形参类型为函数,在内嵌函数中为传入的函数添加新的功能代码。外层的装饰函数则将内层的函数名作为返回值,以此达到为实参函数新增功能的目标,且不用修改原函数。
然后,将原函数作为实参调用装饰函数,并将结果赋值给原函数,此时原函数已是一个包含新增的功能的函数。,具体思路如下:
def 装饰函数(形参1):
def 内嵌函数(形参2):#形参2与原函数的形参保持一致
添加新功能代码
renturn 形参1(参数2)
retunr 内嵌函数
#@装饰函数 #可替代 "原函数= 装饰函数(原函数)"这行代码
def 原函数( 形参2):
.... .....
..........
原函数= 装饰函数(原函数)#该行代码可被 @装饰函数 替代,且其位与原函数之前
具体实例详见代码:
#装饰函数
def defunc(func):
def wrapper(n):#内嵌函数,形参于原函数保持一致
if n%2==0:n=0#新增的功能,n为偶数时,n=0
return func(n)#返回原函数的调用结果
return wrapper#返回内嵌函数
# @defunc#可替代func=defunc(func)这行代码
def func(n):#原函数,输出一个数的平方
return (f"n**2={n**2}")
func=defunc(func)#被装饰后的函数,n为偶数时,返回0,否则,返回n的平方
print("n=2:",func(2))
print("n=3:",func(3))
print("n=4:",func(4))
print("n=5:",func(5))
运行结果:
n=2: n**2=0
n=3: n**2=9
n=4: n**2=0
n=5: n**2=25