python基礎 裝飾器高階

2021-08-10 15:56:17 字數 2734 閱讀 4277

在之前的部落格中裝飾器初識

了解了函式閉包、裝飾器,這篇筆記來繼續了解下裝飾器的高階用法

我們先來看乙個通用的裝飾器寫法:

def

(func):

definner

(*args,**kwargs):

print("before")

ret = func(*args,**kwargs)

print("after")

return ret

return inner

deffunc

(a):

print("func")

return a + 1

deffuncother

(a):

print("funcother")

return a + 1

print(func(1))

print("---------")

print(funcother(1))

輸出如下:

e:\python\python_sdk\python.exe e:/python/py_pro/python.py

before

func

after

2---------

before

funcother

after

2process finished with exit code 0

在了解高階用法之前,我們先來看乙個例子引入:

def

outer

(flag):

def(func):

definner

(*args, **kwargs):

if flag:

print("before")

ret = func(*args, **kwargs)

print("after")

return ret

return inner

deffunc

(a):

print("a:%d"%a)

outer(true)(func)(4)

print("------------")

outer(false)(func)(4)

輸出如下:

e:\python\python_sdk\python.exe e:/python/py_pro/python.py

before

a:4after

------------

a:4after

process finished with exit code 0

以上的**其實就是裝飾器函式的高階雛形,只是缺少了@語法糖而已

同乙個@裝飾器對不同函式處理不同

我們來學習裝飾器的高階用法,如果在第乙個例中,只對func進行裝飾,然而對funcother不進行裝飾,我們就需要修改裝飾器函式

def

outer

(flag):

def(func):

definner

(*args, **kwargs):

if flag:

print("before")

ret = func(*args, **kwargs)

print("after")

return ret

return inner

@outer(true)

deffunc

(a):

print("a:%d"%a)

@outer(false)

deffunc1

(a):

print("a:%d"%a)

func(1)

print("----------")

func1(2)

輸出如下:

e:\python\python_sdk\python.exe e:/python/py_pro/python.py

before

a:1after

----------

a:2after

process finished with exit code 0

關聯多個@裝飾器

以上的例子都是關聯乙個@,如果我們關聯多個@裝飾器,那麼執行流程是怎樣呢?我們看下**如下:

def

(func):

#qqxing

definner1

(*args,**kwargs):

ret = func(*args,**kwargs) #qqxing

return ret

return inner1

def(func):

#inner1

definner2

(*args,**kwargs):

ret = func(*args,**kwargs) #inner1

return ret

return inner2

defqqxing

(): print('qqxing')

qqxing() #inner2

輸出如下:

qqxing

process finished with

exit code 0

python基礎高階之裝飾器

一 閉包 1 閉包概念 def fn num 閉包的基本格式 def fn in print s num return fn in ret fn 30 ret 以上,ret fn 30 做了一下幾件事情 1,讓fn in指向某個記憶體空間 函式 2,在這個空間中建立乙個num指向30 3,把fn i...

python高階裝飾器 Python裝飾器高階

對帶引數的函式進行裝飾 對帶引數的函式進行裝飾,內嵌包裝函式的形參和返回值與原函式相同,裝飾函式返回內嵌包裝函式物件 def deco func def deco a,b print before myfunc called.ret func a,b print after myfunc calle...

python高階 裝飾器

1.1 裝飾器 裝飾器的作用 在不改變原函式的情況下給函式增加功能 裝飾器由閉包和語法糖組成 1.2 閉包 閉包特點 外部函式巢狀內部函式 內部函式可以訪問並且儲存外部函式的變數 外部函式返回內部函式的引用 有以上三個特點的函式就稱為閉包 閉包的例子 def func1 a def func2 b ...