什麼時候會用到python裝飾器?

時間 2021-05-12 00:10:51

1樓:

# decorator factory

from

functools

import

wraps

defmax_result

(threshold

):def

decorator

(func

):@wraps

(func

)def(*

args,**

kwargs

):result

=func(*

args,**

kwargs)if

result

>threshold

:print

('Result is too big (). Max allowed is .'.

format

(result

,threshold

))return

result

return

return

decorator

@max_result(75

)def

cube(n

):returnn**

3@max_result

(100

)def

square(n

):returnn**

2@max_result

(1000

)def

multiply(a

,b):returna*

bprint

(cube(5

))print

(square(5

))print

(multiply(50

,40))

2樓:靈劍

註解就是把乙個函式轉換成另乙個函式,把乙個類轉換為另乙個類,之類。需要這種轉換的情形很多,舉個簡單的例子,某個元件要求傳入乙個函式,這個函式只接受乙個引數,是實際引數的列表;但是如果所有的這類函式都這麼定義的話很不方便,所以可以用修飾器轉換一下:

defarglist(f

):@functools.wraps(f

)def

func

(args

):returnf(

*args

)return

func

@arglist

defmyfunc(a

,b):returna+

b這樣的語法比較優雅,可以看到myfunc的功能就是寫的那樣,但是實際的介面或者實現細節上通過修飾器進行了修改,閱讀和執行起來都比較方便。

3樓:XIVN1987

舉個實際的例子:PyQt中繫結事件和事件處理程式的時候@QtCore.pyqtSlot()

def on_btnOpen_clicked(self):

pass

這樣就不用顯示的connect了

4樓:不中

就像作戰裡的輔助軍一樣。正規軍幹活,輔助軍搞點邊角料工作。跟你程式邏輯相關部分的放在正規軍函式裡。

而有些輔助邏輯跟主要邏輯無關,又具有很高的重複性,放在主要函式裡面會覺得不清晰。做成裝飾器,用起來美觀大方,符合python的美學。

5樓:

這有乙份Python官方的裝飾器例項列表,你可以在裡邊看到裝飾器的各種妙用:PythonDecoratorLibrary,基本上你差不多能想到的都有了。

差不多有這麼幾類:

1. 注入引數(提供預設引數,生成引數)

2. 記錄函式行為(日誌、快取、計時什麼的)3. 預處理/後處理(配置上下文什麼的)

4. 修改呼叫時的上下文(執行緒非同步或者並行,類方法)

6樓:Galaxyan

再你想改變乙個已有函式的功能的時候可以用。 可以新增功能在呼叫函式之前和之後,這樣就可以生成乙個基於之前函式的新函式

例如:def addOne(func):

def wraper(*args,**kwargs):

saySmthing = "Result :"

return saySmthing +" "+ str(func(*args,**kwargs))

return wraper

@addOne

def func(a,b):

return a+b

print(func(10,20))

7樓:

前些天看了兩個演算法,搞明白以後,我用自己的想法實現了一次。然後又用他的實現實現了一次。為了比較哪個更耗時。就做了個裝飾器,功能很簡單就是計算函式執行時間。

但是我說不上來理論根據是什麼,我只知道我會用。

彈奏吉他什麼時候會用到高把位(三品以上的和弦)?

朱磊 我碰到過幾種情況是需要高把位的。第一就是一些調的和弦,如e調的和弦。基本全都是高把位。比如e調的光輝歲月。第二是當有連續相同級數的和弦時。比如兩個連續的c和弦,聽起來會比較單調,這時第二個c和弦就會換成高把位的按法。因為不同按法音色是不同的。第三是需要制音的時候。比如男孩別哭。左手大橫按用來制...

帶奶嘴的水杯可以給寶寶用到什麼時候?

海浬的魚和貓 兒科專家給出的建議是 孩子在1周歲前最好不要使用奶瓶了,最晚也不應超過1歲半。最好能在娃6個月大的時候就開始嘗試讓他用水杯飲水,這樣能留出充裕的時間給孩子適應。 姿娘 用到6個月之後過渡到學飲水杯。我女兒也是6個月之後就換掉奶嘴的水杯了,買了學飲杯帶把手的,因為寶寶會坐之後,可以自己坐...

為什麼python的裝飾器要雙層巢狀?

無名 努力寫個簡短而又通俗的回答!decorator defmy func 等價於 defmy func my func decorator my func 可見裝飾器是乙個函式,它的input是原函式,output是裝飾後的函式。在裝飾器裡,基於原函式,構造出乙個新函式,看起來就像是雙層巢狀。de...