def welcome(func): # 參數是一個函數
def inner_f():
"""這是裝飾器中的welcome函數"""
print('welcome'.center(40,'~'))
func()
return inner_f # 返回值是另外一個函數,使用該返回的函數替代做爲參數的函數python
@welcome # 說明底下定義的函數被welcome所裝飾,使用該返回的函數替代做爲參數的函數
def name():
"""這個是name函數"""
print('name is toto')編程
name() # 調用welcome 函數閉包
一、 被裝飾的函數存在參數的時候編程語言
在構建裝飾器的時候,做爲返回值的函數是用來替代做爲參數的函數的,因此這兩個函數所須要的參數必須一致。就時說再定義函數裝飾器的時候,指定做爲參數的函數能夠因爲任意個參數以及做爲返回值的函數能夠右任意個參數,這樣就能保證再實際使用的時候不論被裝飾的函數須要幾個參數,都能使用該裝飾器。
def welcome(func): # 參數是一個函數
def inner_f(*args,*kwargs): # 指定返回的函數能夠有任意個參數
"""這是裝飾器中的welcome函數"""
print('welcome'.center(40,'~'))
func(args,**kwargs) # 做爲參數的函數也有任意個參數
return inner_f # 返回值是另外一個函數ide
@welcome # 能夠裝飾一個參數的函數
def name(name):
"""這個是name函數"""
print('name is %s' %name)函數
@welcome # 也能夠裝飾兩個參數的函數
def stuinfo(name,age):
print('name is %s ,age is %d' %(name,age))ui
name('toto')
stuinfo('lala',16)對象