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

首頁 > 編程 > Python > 正文

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

2020-01-04 13:56:50
字體:
來源:轉載
供稿:網友

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

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

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

1. 運行業務函數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)

輸出:

[INFO]: enter function say()
say 123!

希望本文所述對大家Python程序設計有所幫助。


注:相關教程知識閱讀請移步到python教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 岳阳市| 浦城县| 吐鲁番市| 双柏县| 聊城市| 信阳市| 贵德县| 定远县| 广西| 仁怀市| 湛江市| 五家渠市| 遂宁市| 汉寿县| 贺州市| 宁津县| 闸北区| 元谋县| 莲花县| 平远县| 吴忠市| 鄂托克前旗| 巴塘县| 四平市| 呼和浩特市| 秦安县| 石首市| 韩城市| 钦州市| 东平县| 云梦县| 九龙城区| 德钦县| 屯门区| 石林| 奉贤区| 卫辉市| 博白县| 鄢陵县| 申扎县| 仪陇县|