python為被裝飾的函數保留中繼資料方法

來源:互聯網
上載者:User
本文主要為大家詳細介紹了python如何為被裝飾的函數保留中繼資料,希望能協助到大家。

案例:

在函數對象中儲存著一些函數的中繼資料,如:

f.__name__ 函數名

f.__doc__ 函數文檔

f.__moudle__ 函數所屬模組名

f.__dict__ 屬性字典

f.__defaults__ 預設參數組

……

在使用裝飾器後,在裝飾器裡訪問以上屬性時,我們看到的是裝飾器函數的中繼資料

需求:

實現在裝飾器函數中,保留 被裝飾函數 的中繼資料

如何??

通過 functools中的wraps, update_wrapper方法實現,每個都可單獨實現


#!/usr/bin/python3 import timefrom functools import (wraps, update_wrapper, WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES)  def count_time(func):  """  給目標函數加上計算已耗用時間統計  """  # 這個裝上器和update_wrapper一樣,預設參數WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES  @wraps(func)  def wrapper(*args, **kwargs):    start_time = time.time()         # 定義result接收函數傳回值,並且在裝飾函數最後返回回去    resutl = func(*args, **kwargs)    print('已耗用時間:', time.time()-start_time)    return resutl     # 其中預設參數 WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES  # update_wrapper(wrapper, func)  return wrapper  @count_timedef add(num=100):  """  計算 0~num 累加值,預設num=100  """  time.sleep(1)  return sum([x for x in range(num+1)]) if __name__ == '__main__':  print('函數名:', add.__name__)  print('屬性字典:', add.__dict__)  print('函數預設參數:', add.__defaults__)  print('函數所在模組:', add.__module__)  print('函數文檔:', add.__doc__)     # 列印兩個預設參數  print(WRAPPER_ASSIGNMENTS, WRAPPER_UPDATES)  result = add()  print(result)


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.