中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python怎么為被裝飾的函數保留元數據

發布時間:2021-02-18 13:39:37 來源:億速云 閱讀:126 作者:小新 欄目:開發技術

小編給大家分享一下python怎么為被裝飾的函數保留元數據,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

案例:

       在函數對象中保存著一些函數的元數據,如:

              f.__name__           函數名

              f.__doc__              函數文檔

              f.__moudle__       函數所屬模塊名

              f.__dict__              屬性字典

              f.__defaults__       默認參數組

              ……

       在使用裝飾器后,在裝飾器里訪問以上屬性時,我們看到的是裝飾器函數的元數據

       需求:

              實現在裝飾器函數中,保留 被裝飾函數 的元數據

如何實現?

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

#!/usr/bin/python3
 
import time
from 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_time
def 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)

看完了這篇文章,相信你對“python怎么為被裝飾的函數保留元數據”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

海阳市| 海伦市| 当涂县| 修水县| 行唐县| 茶陵县| 崇左市| 鹤岗市| 东方市| 嫩江县| 桂平市| 白银市| 宁都县| 新兴县| 巴彦淖尔市| 信阳市| 信丰县| 衡阳市| 霞浦县| 沾化县| 宿松县| 松阳县| 拜泉县| 丽水市| 临西县| 扎囊县| 洛浦县| 四川省| 吉安县| 类乌齐县| 锡林郭勒盟| 南陵县| 大同市| 沅江市| 台山市| 罗平县| 灯塔市| 南澳县| 隆子县| 宁晋县| 黑龙江省|