国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 高邑县| 崇信县| 犍为县| 泰安市| 射洪县| 沅江市| 东丰县| 昌黎县| 延长县| 无锡市| 囊谦县| 铁力市| 湛江市| 怀宁县| 黄平县| 乡城县| 武山县| 昌宁县| 孝感市| 德安县| 江安县| 图木舒克市| 长阳| 哈密市| 高阳县| 武穴市| 甘泉县| 宁蒗| 扬州市| 马龙县| 雅安市| 岳普湖县| 宜城市| 东丰县| 贡山| 石渠县| 武山县| 徐水县| 黎川县| 彭山县| 九龙坡区|