裝飾器 入門

2022-06-26 09:30:12 字數 2386 閱讀 9243

#-*- coding:utf-8 -*-

#開放封閉原則(物件導向),盡量不要修改函式裡面的內容(函式可能會被很多方法呼叫),盡量在外部處理。

#裝飾器可意在函式之前或者函式返回之後呼叫

#裝飾器

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()

結果:hello

1word23

4解析原理:

def

s1(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")

#將原函式封裝在乙個新的函式裡面,主要就是將變數的指標指向了乙個新的值

多個裝飾器**:

defs2(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")

結果:11111

hello

1word

2222223

4多個裝飾器的原理可以記住下個圖:

手動實現裝飾器

def

s1(func):

definner():

print("

hello")

r =func()

print("

word")

return

r

return

inner

deff1():

print("1"

)f1=s1(f1) #裝飾器這裡就是將變指標改成新的函式指標,新函式返回相應的結果即可

print(f1())

結果:hello

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,裝飾器 入門 日誌列印器 入門 時間計時器 高階 帶引數的函式裝飾器 高階 不帶引數的類裝...