#-*- coding:utf-8 -*-結果:hello#開放封閉原則(物件導向),盡量不要修改函式裡面的內容(函式可能會被很多方法呼叫),盡量在外部處理。
#裝飾器可意在函式之前或者函式返回之後呼叫
#裝飾器
def s1(func):
def inner():
print("hello")
r =func()
print("word")
return r
return inner
@s1def f1():
print("1")
def f2():
print("2")
def f3():
print("3")
def f4():
print("4")
f1()
f2()
f3()
f4()
1word23
4解析原理:
defs1(func):
definner():
print("
hello")
r =func()
print("
word")
return
r
return
inner
#@執行s1函式,並將f1函式的名字當引數傳遞
#2 將s1的返回值inner賦值給f1,等同於f1=inner
#3inner中函式過程就很簡單了,r執行的就是f1函式,最後返回r的結果
@s1def
f1():
print("1")
#將原函式封裝在乙個新的函式裡面,主要就是將變數的指標指向了乙個新的值
多個裝飾器**:結果:11111defs2(func):
definner1():
print("
11111")
r =func()
print("
22222")
return
r
return
inner
defs1(func):
definner():
print("
hello")
r =func()
print("
word")
return
r
return
inner
@s2@s1
deff1():
print("
1")
hello
1word
2222223
4多個裝飾器的原理可以記住下個圖:
手動實現裝飾器
def結果:hellos1(func):
definner():
print("
hello")
r =func()
print("
word")
return
r
return
inner
deff1():
print("1"
)f1=s1(f1) #裝飾器這裡就是將變指標改成新的函式指標,新函式返回相應的結果即可
print(f1())
1word
none
def顯示結果:s2(func):
definner1():
print("
11111")
r =func()
print("
22222")
return
r
return
inner1
defs1(func):
definner():
print("
hello")
r =func()
print("
word")
return
r
return
inner
deff1():
print("1"
)f2=s2(s1(f1)) #這麼寫跟用@是乙個意思。s2接受s1的位址,s1接受f1的位址,f2()正常呼叫函式
print(f2())
11111
hello
1word
22222
none
python入門之裝飾器
裝飾器 定義 本質是函式,功能就是用來裝飾其它函式 就是為其他函式新增附加功能 原則 1.不能修改被裝飾的函式的源 2.被修飾的函式的呼叫方式不能被修改 實現裝飾器知識儲備 1.函式即 變數 2.高階函式 3.巢狀函式 4.高階函式 巢狀函式 裝飾器 函式即 變數 定義乙個函式就等於把函式體複製給了...
python 基礎裝飾器入門
1 裝飾器語法糖 python提供了 符號作為裝飾器的語法糖,使我們更方便的應用裝飾函式。但使用語法糖要求裝飾函式必須return乙個函式物件。因此我們將上面的func函式使用內嵌函式包裹並return。裝飾器相當於執行了裝飾函式use loggin後又返回被裝飾函式bar,因此bar 被呼叫的時候...
裝飾器的入門到精通
關於裝飾器,在面試時,經常會被問到這兩個問題 1 你都用過裝飾器實現過什麼樣的功能?2 請手寫乙個可以傳參的裝飾器?這篇部落格就根據這兩個問題,帶大家系統的學習裝飾器的所有內容.希望對大家有所幫助.hello,裝飾器 入門 日誌列印器 入門 時間計時器 高階 帶引數的函式裝飾器 高階 不帶引數的類裝...