国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

python如何修改裝飾器中參數

2020-01-04 15:34:49
字體:
來源:轉載
供稿:網友

本文實例為大家分享了python修改裝飾器中參數的具體代碼,供大家參考,具體內容如下

案例:

       為分析程序內哪些函數執行時間開銷較大,我們需定義一個帶timeout參數的裝飾器

       需求:

    統計被裝飾函數的運行時間

    時間大于timeout時,將此次函數調用記錄到log日志中

    運行時可以修改timeout的值

如何解決這個問題?

  • 定義一個裝飾器,計算函數執行時間,并與timeout比較,當大于timeout時候,通過logging模塊打印出日志信息
  • 在包裹函數中添加一個函數,通過這個函數來修改timeout變量
  • 在python3中用nonlocal來聲明嵌套作用域中的變量引用,在python2中可以通過把timeout參數變成列表,通過列表索引來進行改值
#!/usr/bin/python3 import timeimport loggingfrom random import randint  def run_time(timeout):  """  定義檢查函數運行時間,并打印對應函數運行時間超出設定時間日志,并支持更改timeout  """   # python2  # timeout = [timeout]     # 真正包裹函數  def out_wrapper(func):    def wrapper(*args, **kwargs):             start_time = time.time()      result = func(*args, **kwargs)      used_time = time.time() - start_time             # 對于超出timeout的函數進行日志打印      if used_time > timeout:        msg = '%s: %s > %s' % (func.__name__, used_time, timeout)        logging.warn(msg)             # python2      # if used_time > timeout[0]:      #   msg = '%s: %s > %s' % (func.__name__, used_time, timeout[0])      #   logging.warn(msg)      # return result         # 設置timeout參數值    def set_timeout(value):      nonlocal timeout      timeout = value    wrapper.set_timeout = set_timeout         # python2    # def set_timeout(value):    #   timeout[0] = value    # wrapper.set_timeout = set_timeout         return wrapper  return out_wrapper  @run_time(1.5)def func():  # 隨機有50%的幾率程序沉睡1秒  while randint(0, 1):    time.sleep(1)  print('func_run') if __name__ == "__main__":  for _ in range(10):    func()       print('_'*50)     # 更改run_time裝飾器中timeout參數  func.set_timeout(2)  for _ in range(10):    func()

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 泽普县| 盖州市| 普格县| 博乐市| 柘城县| 山西省| 宝丰县| 江北区| 吴川市| 姜堰市| 平顶山市| 宜兰市| 永川市| 修文县| 高台县| 沙河市| 乐东| 安图县| 英超| 饶平县| 图木舒克市| 禄丰县| 德格县| 中卫市| 潼南县| 满洲里市| 漠河县| 乌审旗| 新化县| 榆林市| 金华市| 抚宁县| 信阳市| 克东县| 东光县| 荥经县| 平度市| 修武县| 横山县| 绥芬河市| 武强县|