python裝飾器的特性原理詳解

2022-09-27 03:18:09 字數 926 閱讀 9489

今天發現了裝飾器的另一種用法,下面就先上**:

data_list =

def data_item(func):

程式設計客棧 data_list.append(func)

return func

@data_item

def foo():

return 1

@data_item

def foo1():

return 2

@data_item

def foo3():

return 3

def max_item():

result = max(i() for i in data_list)

return result

if __name__ == '__main__':

item = max_item()

print(item)

**很簡單就是,定義三個foo開頭的函式,每個foo函式輸出不一樣的數字,都通過裝飾器data_item進行修飾,最後通過max_item函式,執行一系列邏輯獲取結果。

程式設計客棧這裡有個容易被忽略的點,那就是裝飾器實際是程式設計客棧在執行 max_item()之前就執行了。

所以,如果你列印下data_list你會發現它是有值的。

[, , ]

即列表裡面已經有三個被裝飾器修飾的函式了,然後在

max(i() for i in data_list)

的i()階段這三個函式執行了,得到了結果(1,2,3),然後最後取它們的max值即3。

什麼場景會用到呢,一般對於傳入乙個值然後多種處理方案,選擇其中最佳方案的時候可以考慮使用這種方法。

emmm,裝飾器還是挺有意思的。

本文標題: python裝飾器的特性原理詳解

本文位址: /jiaoben/python/295185.html

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

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

python中的 property裝飾器詳解

coding utf 8 property 負責裝飾乙個物件函式,讓其生成對應的 setter 和getter 函式,呼叫的時候可以直接使用物件名 函式名 函式名不加括的形式,這種類似屬性的呼叫方式來執行函式 class man object property 裝飾的物件函式就是乙個 getter ...

Python高階特性之閉包與裝飾器例項詳解

閉包 1.函式引數 1 函式名存放的是函式的位址 2 函式名 存放的是函式內的 3 函式名只是函式 空間的引用,當函式名賦值給乙個物件的時候,就是引用傳遞 def func01 print func01 is show test func01 print func01 print test test...