def func1(age):
print ("%d"%(age))
//如果直接打印-10是沒有問題,但是年齡不肯為負(fù)數(shù)
//而且我也不想修改原有的方法就可以弄一個裝飾器
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)
打印結(jié)果:
第一次沒有包裝過的打印是-10
第二次包裝過打印 0;
以上方法可以進(jìn)行優(yōu)化:
利用“@” 如下 在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,"男")