1. 程式人生 > 程式設計 >python裝飾器的特性原理詳解

python裝飾器的特性原理詳解

這篇文章主要介紹了python裝飾器的特性原理詳解,文中通過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

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

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你會發現它是有值的。

[<function foo at 0x10bb05ea0>,<function foo1 at 0x10bb05d90>,<function foo3 at 0x10bb05f28>]

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

max(i() for i in data_list)

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

什麼場景會用到呢,一般對於傳入一個值然後多種處理方案,選擇其中最佳方案的時候可以考慮使用這種方法。
emmm,裝飾器還是挺有意思的。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。