定義:
在不改變原函式的呼叫以及內部**情況下,為其新增新功能的函式.
語法:
def 裝飾器名稱(func):
def 內嵌函式(*args, **kwargs(雙星號字典形參)):
需要新增的新功能
return func(*args, **kwargs)
@ 裝飾器名稱
def 原函式名稱(引數):
函式體原函式(引數)
注:
雙星號字典形參:讓關鍵字實參的數量無限
def
fun05
(**kwargs)
:print
(kwargs)
fun05(a=1)
#fun05(a=
1, b=
2, qtx=3)
#
本質:
使用「@函式裝飾器名稱」修飾原函式,等同於建立與原函式名稱相同的變數,關聯內嵌函式;故呼叫原函式時執行內嵌函式.
原函式名稱 = 函式裝飾器名稱(原函式名稱)
裝飾器鏈:
乙個函式可以被多個裝飾器修飾,執行順序為從近到遠.
裝飾器的應用(**示例):
#不影響舊功能(函式, 例項方法)基礎,增加新功能(統計方法/函式的執行時間).
import time
defcalculate_execute_time
(func)
:def
(*args,
**kwargs)
:# 新功能
start_time = time.time(
) re = func(
*args,
**kwargs)
# 如此可實現呼叫前開始計時,呼叫 後結束計時
stop_time = time.time(
)print
(stop_time - start_time)
return re
@calculate_execute_time
deffun01()
:print
("fun01執行嘍"
)class
myclass
: @calculate_execute_time
deffun02
(self)
:for i in
range
(100):
print
(i)fun01(
)myclass(
).fun02(
)
函式裝飾器和閉包
裝飾器是可呼叫的物件,其引數是另乙個函式 被裝飾的函式 裝飾器可能會處理被裝飾的函式,然後把它返回,或者將其替換成另乙個函式或可呼叫物件。裝飾器通常把函式替換成另乙個函式 defdeco func definner print running inner return inner deco def ...
閉包函式和裝飾器
目錄 二 閉包函式的應用 裝飾器閉包 閉是封閉 函式內部巢狀函式 包是包含,閉包是指該內部函式對外部作用域而非全域性作用域的變數的引用。為函式傳參的方式一 使用引數的形式def func x print x func 1 為函式傳參的方式二 包給函式def outter x x 2 def inne...
閉包函式與裝飾器
一 閉包函式 定義在函式內部的函式,並且該函式包含對外部函式作用域中名字的引用,該函式就稱為閉包函式。乙個持有外部環境變數的函式就是閉包,閉包 函式塊 定義函式時的環境。閉包函式是乙個能記住巢狀作用域變數值的函式,儘管作用域已經不存在 工廠函式定義了乙個外部的函式,這個函式簡單的生成並返回乙個內嵌的...