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
('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
(square(5
(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...