python裝飾器(披著羊皮的狼)

2022-09-11 13:39:17 字數 1843 閱讀 7341

python裝飾器的作用是在不改變原有函式的基礎上,對函式的功能進行增加或者修改。

裝飾器語法是python語言更加優美且避免很多繁瑣的事情,flask中配置路由的方式便是裝飾器。

首先python中乙個函式也是可以當做乙個物件進行傳遞的。

1

defsheep(f):

2def

she():

3print("

i'm a sheep")

4return

f()5

return

she6

7@sheep

8def

wolf():

9print("

i'm a wolf")

1011

if__name__ == "

__main__":

12 wolf()

輸出結果為

i'

m a sheep

i'm a wolf

上面**相當於 

wolf =sheep(wolf)

wolf()

帶引數的裝飾器

1

defchange(a):

2def

sheep(f):

3def

she():

4print("

i'm a sheep")

5f()

6print("

you're not ,you're {} sheep

".format(a))

7return

she8

return

sheep

910 @change("

fake")

11def

wolf():

12print("

i'm a wolf")

1314

if__name__ == "

__main__":

15 wolf()

結果:

i'

m a sheep

i'm a wolf

you'

re not ,you

're fake sheep

相當於

wolf = change("

fake

")(wolf)

wolf()

其實函式名此時發生了改變

wolf.__name__的值為she

解決辦法為使用functools.wraps

1

import

functools23

defchange(a):

4def

sheep(f):

[email protected](f)

6def

she():

7print("

i'm a sheep")

8f()

9print("

you're not ,you're {} sheep

".format(a))

10return

she11

return

sheep

1213

defwolf():

14print("

i'm a wolf")

1516

if__name__ == "

__main__":

17 wolf = change("

fake

")(wolf)

18 wolf()

python裝飾器 Python 裝飾器

簡言之,python裝飾器就是用於拓展原來函式功能的一種函式,這個函式的特殊之處在於它的返回值也是乙個函式,使用python裝飾器的好處就是在不用更改原函式的 前提下給函式增加新的功能。一般而言,我們要想拓展原來函式 最直接的辦法就是侵入 裡面修改,例如 這是我們最原始的的乙個函式,然後我們試圖記錄...

python裝飾器 裝飾器

由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。def now print 2015 3 25 f now f 2015 3 25 函式物件有乙個 name 屬性,可以拿到函式的名字 now.name now f.name now 現在,假設我們要增強now 函式的...

python裝飾器原理 Python裝飾器原理

裝飾器 decorator 是物件導向設計模式的一種,這種模式的核心思想是在不改變原來核心業務邏輯 的情況下,對函式或類物件進行額外的修飾。python中的裝飾器由python直譯器直接支援,其定義形式如下 decorator def core service 要理解上述 的含義,我們從自定義函式裝...