python如何為被裝飾的函數保留中繼資料,python中繼資料

來源:互聯網
上載者:User

python如何為被裝飾的函數保留中繼資料,python中繼資料

本文執行個體為大家分享了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.