python裝飾器的一些理解

2021-09-10 03:50:01 字數 1041 閱讀 3891

以乙個帶引數的函式的裝飾器為例子

def

debug

(func)

:def

(something)

:# 指定一毛一樣的引數

print

("[debug]: enter {}()"

.format

(func.__name__)

)return func(something)

#這裡寫func(something)好像也可以

@debug

defsay

(something)

:print

("hello {}!"

.format

(something)

)say(

"yfc"

)

以現在初學的理解是相當於把被裝飾的函式作為引數,重寫乙個包含被裝飾函式內容的函式,最後返回乙個新函式。

**但是有一些函式的引數我們是不知道的,這個時候可以使用*args,*kwargs來填充引數(args把引數打包成元組,**kwargs把元素打包成字典)

這個時候上面的**就可以改為

def

debug

(func)

:def

(*args,

**kwargs)

:# 指定一毛一樣的引數

print

("[debug]: enter {}()"

.format

(func.__name__)

)return func(

*args,

**kwargs)

#這裡寫func(*args,**kwargs)好像也可以

@debug

defsay

(something)

:print

("hello {}!"

.format

(something)

)

這差不多就是裝飾器的初級用法了。

python裝飾器的一些理解

以乙個帶引數的函式的裝飾器為例子 def debug func def something 指定一毛一樣的引數 print debug enter format func.name return func something 這裡寫func something 好像也可以 debug defsay ...

關於python裝飾器的一些體會總結。

首先說下裝飾器的目的,在不改變原函式的情況下給函式新增功能。裝飾器的三個要求 不能修改被裝飾的函式的源 不能修改被裝飾的函式的呼叫方式 滿足1 2的情況下給程式增添功能 假設給下列函式新增個計算執行時間的功能,原函式 然後 看似實現了功能,可是有個問題,此時只能用time count test 無法...

python裝飾器理解 python裝飾器理解

裝飾器 在不改變原函式的 和呼叫方法的基礎上,給原函式增加額外的功能 理解宣告 為了方便理解,以下例子採用最簡潔的函式和新增的功能 給原函式新增乙個執行時間 import time def timer func def inner func return inner timer func timer...