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

首頁 > 編程 > Python > 正文

python如何修改裝飾器中參數(shù)

2020-02-22 23:30:48
字體:
供稿:網(wǎng)友

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

案例:

       為分析程序內(nèi)哪些函數(shù)執(zhí)行時間開銷較大,我們需定義一個帶timeout參數(shù)的裝飾器

       需求:

    統(tǒng)計被裝飾函數(shù)的運行時間

    時間大于timeout時,將此次函數(shù)調(diào)用記錄到log日志中

    運行時可以修改timeout的值

如何解決這個問題?

定義一個裝飾器,計算函數(shù)執(zhí)行時間,并與timeout比較,當大于timeout時候,通過logging模塊打印出日志信息 在包裹函數(shù)中添加一個函數(shù),通過這個函數(shù)來修改timeout變量 在python3中用nonlocal來聲明嵌套作用域中的變量引用,在python2中可以通過把timeout參數(shù)變成列表,通過列表索引來進行改值
#!/usr/bin/python3 import timeimport loggingfrom random import randint  def run_time(timeout):  """  定義檢查函數(shù)運行時間,并打印對應函數(shù)運行時間超出設定時間日志,并支持更改timeout  """   # python2  # timeout = [timeout]     # 真正包裹函數(shù)  def out_wrapper(func):    def wrapper(*args, **kwargs):             start_time = time.time()      result = func(*args, **kwargs)      used_time = time.time() - start_time             # 對于超出timeout的函數(shù)進行日志打印      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參數(shù)值    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參數(shù)  func.set_timeout(2)  for _ in range(10):    func()

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持武林站長站。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 安丘市| 吉林省| 永嘉县| 泰宁县| 清水河县| 英山县| 乌拉特后旗| 龙州县| 翼城县| 樟树市| 财经| 霸州市| 平山县| 呼伦贝尔市| 蓝田县| 左贡县| 会东县| 东乡县| 韶山市| 苏尼特右旗| 城固县| 西乌珠穆沁旗| 岳阳市| 隆林| 慈利县| 佛冈县| 青海省| 满洲里市| 荔波县| 乌拉特中旗| 当涂县| 滕州市| 赣榆县| 高雄县| 浪卡子县| 宜黄县| 合江县| 博湖县| 根河市| 青浦区| 南投市|