Python基礎學習 函式裝飾器

2021-08-17 02:33:16 字數 1358 閱讀 4208

裝飾器是python中非常實用的函式表達法,盡頭我們不講裝飾器原理,只講怎麼應用。裝飾器原理涉及物件導向以及函式本身也可以作為乙個引數被傳遞,原理比較簡單,但由於迴圈巢狀初學者難以理解。既然難以理解,那就先學會怎麼用,有了經驗,理解起來就相對容易了。首先我們要明白,裝飾器內函式是先於被裝飾函式執行的。

1.最簡單的裝飾器

def test(func):  #不帶引數的函式裝飾器最外層,也是該裝飾器的名字                 

#以確保被裝飾函式的引數可以被順利傳遞,也可

#根據被裝飾函式的引數進行修改

#要為被裝飾函式增添的功能應當在這裡寫出

return func(*args,**kwargs)#裝飾函式返回值,不建議修改,若修改理由同該函式定義層所述。此外,已經在上面語句呼叫了被裝飾函式的話,可以修改為自己需求的返回值。

@test #裝飾器語法糖,表明用該裝飾器裝飾緊跟其下定義的函式

def test_1(): #被裝飾函式

print("this is decorated function") #被裝飾的函式函式體

test_1() #呼叫被裝飾後的test_1函式,它可以實現自己函式體內的功能,以及裝飾函式函式體內的功能

2.帶引數的裝飾器

帶引數的裝飾器需要三層結構

def test(para_1):  #不帶引數的函式裝飾器最外層,也是該裝飾器的名字,其引數為裝飾函式所需要的引數,

#該引數在裝飾器語法糖內被賦值

def decorator(func)

#以確保被裝飾函式的引數可以被順利傳遞,也可

#根據被裝飾函式的引數進行修改,可以在該函式

#內使用裝飾器語法糖內傳遞進來的引數

if para_1 == 'true' #裝飾函式自身的函式體,你所

return func(*args,**kwargs)#裝飾函式返回值,不建議修改,若修改理由同該函式定義層所述

return decorator #返回值為第二層裝飾函式名,一般不要修改,它只是為了讓引數

#傳遞符合語法規範才出現

@test(para_1 = 'true') #裝飾器語法糖,表明用該裝飾器裝飾緊跟其下定義的函式

def test_1(): #被裝飾函式

print("this is decorated function") #被裝飾的函式函式體

test_1() #呼叫被裝飾後的test_1函式,它可以實現自己函式體內的功能,以及裝飾函式函式體內的功能

python基礎學習 裝飾器

學習python時,我提出過如下問題 1.裝飾器是什麼?2.乙個 符號 乙個函式名就是乙個裝飾器了?3.什麼時候要用到這是神器的工具?到底怎麼理解 怎麼應用裝飾器,在本文中概括一下自己的理解。一 先舉栗子,逐層分析 1 獲取func函式的執行時間 2 import time 3 4 這是乙個計時函式...

Python基礎學習(裝飾器)

增強乙個函式的功能,但又不想修改函式的定義,這種在 執行期間動態增加功能的方式,稱之為裝飾器。def log func def args,kw print callback format func.name return func args,kw log defnow print 2019 3 21...

Python學習 函式裝飾器

裝飾器 定義 本質是函式,裝飾其它函式,就是為其它函式新增附件功能。不能修改被裝飾函式的源 不能修改被裝飾函式的呼叫方式。高階函式 函式巢狀 import time deftime func def args,kwargs start time.time func end time.time pri...