python 函式裝飾 Python 函式裝飾器

2021-10-11 13:06:12 字數 1259 閱讀 9631

無引數的@函式裝飾器

#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...