無引數的@函式裝飾器
#funa 作為裝飾器函式
def funa(fn):
print("sakura_func_a")
fn() # 執行傳入的fn引數
print("sakura_second")
return "sakura return"
@funa
def funb():
print("sakurab")
返回結果為
sakura_func_a
sakurab
sakura_second
如果直接print(funb),其結果為
sakura return
被「@函式」修飾的函式不再是原來的函式,而是被替換成乙個新的東西(取決於裝飾器的返回值),實際上,所謂函式裝飾器,就是通過裝飾器函式,在不修改原函式的前提下,來對函式的功能進行合理的擴充。
帶引數的@函式裝飾器
比較簡單的解決方法就是在函式裝飾器中巢狀乙個函式,該函式帶有的引數個數和被裝飾器修飾的函式相同
def funa(fn):
# 定義乙個巢狀函式
def say(arc):
print("python教程:",arc)
return say
@funa
def funb(arc):
print("funb():", a)
funb("")
如果當前程式中,有多個(≥ 2)函式被同乙個裝飾器函式修飾,這些函式帶有的引數個數並不相等,最簡單的解決方式是用 * args 和 ** kwargs 作為裝飾器內部巢狀函式的引數,*args 和 **kwargs 表示接受任意數量和型別的引數
def funa(fn):
# 定義乙個巢狀函式
def say(*args,**kwargs):
fn(*args,**kwargs)
return say
@funa
def funb(arc):
print("c語言中文網:",arc)
@funa
def other_funb(name,arc):
print(name,arc)
funb("")
other_funb("python教程:","")
巢狀裝飾器
@funa
@funb
@func
def fun():
執行順序
fun = funa( funb ( func (fun) ) )
python 函式裝飾 Python 函式裝飾器
首次接觸到裝飾器的概念,太菜啦!python 裝飾器可以大大節省 的編寫量,提公升 的重複使用率。函式裝飾器其本質也是乙個函式,我們可以把它理解為函式中定義了乙個子函式。例如我們有這麼乙個需求,每次執行乙個函式後,需要知道這個函式執行了多長時間。一般情況下,我會這樣寫 defaccumulate n...
python 裝飾函式
此文的最後乙個蛋疼的例子可以幫助理解這個概念,錯誤寫法 def warp fun print fun print warp def myprint print lalala myprint 這句並沒有卵用,刪掉這句也會有輸出,輸出是由 warp這句列印的 print myprint none 正確的...
python函式裝飾函式 Python函式裝飾器
本文來介紹一下python的函式裝飾器,類裝飾器以後另開一文講。裝飾器可以看做是python中的乙個語法糖,基本的寫法示例如下 defdecorator func returnfunc decoratordeffunction print 666 decorator即是function的裝飾器,在f...