一、有一個方法
def hunan():
print('我是湖南人')
hunan()
結果:
我是湖南人
二、不改變被裝飾函數代碼及調用方法
def food(func):
def eat():
china_id = '123456'
input_id = input('請輸入×××編号:')
if input_id == china_id:
print('吃辣椒')
func()
else:
print('錯誤的編号')
return eat
@food # == huname=food(huname)
def hunan():
print('我是湖南人')
hunan()
請輸入×××編号:123456
吃辣椒
我是湖南人
注:方法名傳回記憶體位址,方法名() 執行該方法,例如
>>> def fan():
... print('我愛你')
...
>>> fan
<function fan at 0x0000000001FB86A8>
>>> fan()
我愛你
三、方法有參數的情況
def hunan(name):
print('我是湖南人',name)
hunan('Sam')
我是湖南人 Sam
裝飾器
def food(func):
def eat(*args, **kwargs): # 參數
china_id = '123456'
input_id = input('請輸入×××編号:')
if input_id == china_id:
print('吃辣椒')
func(*args, **kwargs) #參數
else:
print('錯誤的編号')
return eat
@food
def hunan(name):
print('我是湖南人',name)
hunan('Sam')
請輸入×××編号:123456
吃辣椒
我是湖南人 Sam
def identity(national): # 比無參數多了一層函數
def food(func):
def whoami(*args, **kwargs):
if national == '德國人':
func(*args, **kwargs)
print('德國人,吃辣')
elif national == '美國人':
func(*args, **kwargs)
print('美國人,不吃辣')
else:
print('不明國籍')
return whoami
return food
@identity(national='德國人')
def named(name):
print('我是%s' % name)
@identity(national='美國人')
def named2(name):
print('我是%s' % name)
named('Sam')
named2('Jey')
我是Sam
德國人,吃辣
我是Jey
美國人,不吃辣