def func1(age):
print ("%d"%(age))
//如果直接打印-10是没有问题,但是年龄不肯为负数
//而且我也不想修改原有的方法就可以弄一个装饰器
func1(-10)
//装饰器:把func1整个包装一层
def outer(func):
def inner(age):
if age < 0:
age = 0
func(age)
return inner
//func2 就是func1包装后的新方法
func2 = outer(func1)
//然后再次传入-10
func2(-10)
打印结果:
第一次没有包装过的打印是-10
第二次包装过打印 0;

以上方法可以进行优化:
利用“@” 如下 在func1上加一个@ outer
def outer(func): def inner(age): if age < 0: age = 0 func(age) return inner @outer def func1(age): print ("%d"%(age)) func1(-10)
万能装饰器:
def outer(func):
def inner(*args,**kwargs):
# 可以在这里添加修改功能
func(*args,**kwargs)
return inner
@outer
def func1(age,sex):
print ("%d %s"%(age,sex))
func1(-10,"男")
网友评论