python的裝飾器

2022-08-18 22:30:19 字數 1728 閱讀 3519

捋了一遍又一遍,終於對裝飾器有了一點點的認識

基本的裝飾器長這樣:

def

add_news(func):

def new_func(*args, **kwargs):

print("

這是新新增的內容")

return func(*args, **kwargs)

return new_func

@add_news

def my_func():

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

if __name__ == "__main__":

my_func()

#直譯器解釋時,基本裝飾器實際是這樣執行的:

#my_func = add_news(my_func)

#my_func 此時指向 new_func 函式

#呼叫 my_func() 前,直譯器是會直接執行以上部分的!!!!

#my_func() 相當於 new_func()

高階一點的裝飾器長這樣:

1

defadd_news(arg):

2print(arg)3

defnew_dec(func):

4def new_func(*args, **kwargs):

5print("

這是需要新增的內容")

6return func(*args, **kwargs)

7return

new_func

8return

new_dec

910 @add_news("

sixsam")

11def my_func(name="

tom"

):12

print("

your name is {}

".format(name))

#相當於:

#my_func = add_news("sixsam").(my_func)

#add_news("sixsam") ,返回了 new_dec

#new_dec(my_func) ,返回了 new_func

#注意,直譯器解釋到有裝飾器的時候,以上部分是會直接執行的

#最後,呼叫 my_func() 時,

#相當於執行了 new_func()

然後,下面這個**,就說的通了,之前一直不明白

def log(func=none):

def

def inner(*args, **kwargs):

print('

new thing')

func(*args, **kwargs)

print("

another something")

return

return

inner

if func is

none:

return

elif

callable(func):

return

@log

defmy_func_1():

print("

func_1")

@log()

defmy_func_2():

print("

func_2")

#這個裝飾器,使用時,即使加上了括號,也不會報錯了,兩個用法一樣

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 要理解上述 的含義,我們從自定義函式裝...