其實去年就開始學python了,零零散散,陸陸續續學了點,期間學習了python web開發,爬蟲系統;但是一些基礎性的知識點長時間不看了就會忘,所以寫個部落格記錄下來,忘了可以隨時檢視,不用回去看**了,希望也能幫助大家學習哈。
python中的裝飾器decorator其實是乙個高階函式,它接受乙個函式作為引數,並返回乙個新的函式,它的執行是由外向內的,**如下
#裝飾器函式
def log(f):
def fn():
print (('call ') + f.__name__ + '()...')
r = f() # 這個函式就是呼叫的 f1()函式
return r #返回f1() 函式的執行結果
return fn
@log #1.自動執行log函式,並且將其下面的函式名f作為引數
def f1():
print('我是函式f1')
f1()
#輸出結果
# call f1()...
# 我是函式f1
我們可以看到上面**執行的是乙個沒有引數的函式,如果函式有引數,並且有多少個引數我們不知道,那該怎麼辦呢?非常好的一點是python裡面提供了萬能引數供我們使用,如果對萬能引數不明白的可以看我的
def log2(f):
def inner(*args,**kwargs): #這2個引數 會接受任意型別的引數
print('before')
r = f(*args,**kwargs)
print('after')
return r
return inner
@log2
def f2(name,age):
print('my name is %s ,i am %s years old'%(name,age))
f2('eric',24)
#輸出# before
# my name is eric ,i am 24 years old
# after
比方說一所中學有乙個夏令營的活動,夏令營有各種活動,但是每個活動對學生的要求不一樣,有的活動要求學生必須滿18歲,有的活動要求學生必須考試分數及格(60),還有的活動必須要求學生2個都滿足,每個活動都可以寫成乙個函式,如果這些要求條件我們都寫成裝飾器的話,就有點太冗餘了,還好就是可以多重裝飾,簡單說就是乙個函式可以有多個裝飾器,**如下
user_info = # 使用者分數 #使用者年齡
def check_age(f):
def inner(*args,**kwargs):
#檢查年齡 是否滿18
if user_info.get('age',none) >= 18:
r = f(*args,**kwargs) #年齡符合 呼叫方法
return r
else:
print('你還未成年,一邊待著去......')
return inner
def check_score(f):
def inner(*args, **kwargs):
#檢查分數是否合格 60份合格
if user_info.get('score',none) >= 60:
r = f(*args, **kwargs)
return r
else:
print('你考試不合格,繼續努力......')
return inner
# 2個裝飾器修飾 會先執行判斷年齡的裝飾器,在執行判斷分數的裝飾器
@check_age
@check_score
def swimming():
print('歡迎來游泳'.center(40, '*'))
@check_age
def basketball():
print('歡迎來籃球隊玩耍'.center(40,'*'))
@check_score
def football():
print('歡迎來足球隊飛'.center(40, '*'))
''' 1.籃球不需要分數,但是要年齡滿18歲
2.足球不需要年齡,但要分數滿60
3.游泳急需要年齡滿18 有需要分數滿60
'''def main():
while true:
imp = input('1.籃球,2.足球,3.游泳\n>>>')
age = input('請輸入你的年齡:')
score = input('請輸入你的分數:')
user_info['age'] = int(age)
user_info['score'] = int(score)
if imp == '1':
basketball()
elif imp == '2':
football()
elif imp == '3':
swimming()
if __name__ == '__main__':
main()
Python 中的裝飾器
1.基本概念 問題 裝飾器是什麼?解答 嚴格來說,裝飾器只是語法糖,裝飾器是可呼叫的物件,可以像常規的可呼叫物件那樣呼叫,特殊的地方是裝飾器的引數是乙個函式 問題 裝飾器有什麼特性?解答 裝飾器有 個特性,一是可以把被裝飾的函式替換成其他函式,二是可以在載入模組時候立即執行 def decorate...
python中的 裝飾器
示例 def fun a arg print a arg fun a deffun b print b 輸出 c python34 python.exe c users administrator desktop test.pyab process finished with exit code 0...
python中的裝飾器
什麼是裝飾器 如果有函式a,b,c,已經所有編寫完畢。這時你發現a,b,c都須要同乙個功能,這時該怎麼辦?答 裝飾器 裝飾器事實上就是乙個函式,只是這個函式的返回值是乙個函式 個人理解。裝飾器主要就是為了完畢上邊的這個功能,將a,b,c 函式包裹在還有乙個函式d中。d函式在a函式執行之前或之後,處理...