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

首頁 > 編程 > Python > 正文

Python裝飾器簡單用法實例小結

2020-02-15 23:54:28
字體:
來源:轉載
供稿:網友

本文總結分析了Python裝飾器簡單用法。分享給大家供大家參考,具體如下:

裝飾器在python中扮演著很重要的作用,例如插入日志等,裝飾器可以為添加額外的功能同時又不影響業(yè)務函數的功能。

比如,運行業(yè)務函數fun()同時打印運行花費的時間

1. 運行業(yè)務函數fun()同時打印運行花費的時間

import timedef dec(fun):  start = time.time()  fun()  end = time.time()  a = end - start  print adef myfun():  print 'run myfunction'dec(myfun)

運行結果

(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.00108599662781

但是每次運行myfun都要調用dec,下面作下變動解決這個問題

2.

import timedef dec(fun):  def wrap():    start = time.time()    fun()    end = time.time()    a = end - start    print a  return wrapdef myfun():  print 'run myfunction'myfun=dec(myfun)myfun()

運行結果:

(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.00122618675232

這個裝飾器dec就實現了,并且不影響函數myfun功能

3. 裝飾器@符

import timedef dec(fun):  def wrap():    start = time.time()    fun()    end = time.time()    a = end - start    print a  return wrap@decdef myfun():  print 'run myfunction'myfun()

結果

(virt2) root@ubuntu:/home/z# python z.py
run myfunction
0.000470876693726

使用了@后,就不用給myfun重新賦值了

@dec就相當于myfun=dec(myfun)

例子:

def level(leveel):  def debug(func):    def wrapper(*args, **kwargs):      print("[DEBUG]: enter {}()".format(func.__name__),leveel)      return func(*args, **kwargs)    return wrapper  return debug@level(leveel='debuging')def say(something):  print ("hello {}!".format(something))say(123)

輸出:

('[DEBUG]: enter say()', 'debuging')
hello 123!

'''class logging(object):  def __init__(self, func):    self.func = func  def __call__(self, *args, **kwargs):    print ("[DEBUG]: enter function {func}()".format(      func=self.func.__name__))    return self.func(*args, **kwargs)@loggingdef say(something):  print ("say {}!".format(something))'''class logging(object):  def __init__(self, level='INFO'):    self.level = level  def __call__(self, func): # 接受函數    def wrapper(*args, **kwargs):      print ("[{level}]: enter function {func}()".format(        level=self.level,        func=func.__name__))      func(*args, **kwargs)    return wrapper #返回函數@logging(level='INFO')def say(something):  print ("say {}!".format(something))say(123)

輸出:

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 琼结县| 谷城县| 双桥区| 拉孜县| 夏津县| 苏尼特右旗| 怀远县| 社旗县| 达日县| 宜丰县| 开阳县| 桐庐县| 三门峡市| 伊吾县| 五台县| 儋州市| 高淳县| 鄂尔多斯市| 常宁市| 长岛县| 定结县| 巨鹿县| 咸宁市| 桐乡市| 石泉县| 长泰县| 贺州市| 子长县| 左权县| 榕江县| 隆子县| 湘乡市| 运城市| 九龙县| 射洪县| 南汇区| 珲春市| 嘉峪关市| 武义县| 佛冈县| 嘉义市|