Python装饰器简单用法实例小结

作者:darkfour 时间:2022-01-18 22:19:40 

本文总结分析了Python装饰器简单用法。分享给大家供大家参考,具体如下:

装饰器在python中扮演着很重要的作用,例如插入日志等,装饰器可以为添加额外的功能同时又不影响业务函数的功能。

比如,运行业务函数fun()同时打印运行花费的时间

1. 运行业务函数fun()同时打印运行花费的时间


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

运行结果

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

但是每次运行myfun都要调用dec,下面作下变动解决这个问题

2.


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

运行结果:

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

这个装饰器dec就实现了,并且不影响函数myfun功能

3. 装饰器@符


import time
def dec(fun):
 def wrap():
   start = time.time()
   fun()
   end = time.time()
   a = end - start
   print a
 return wrap
@dec
def 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)
@logging
def 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程序设计有所帮助。

来源:https://blog.csdn.net/darkfour/article/details/74747768

标签:Python,装饰器
0
投稿

猜你喜欢

  • MSSQL数据加密解密代码

    2023-07-08 18:45:30
  • 如何在网页显示英语音标(附实例)

    2010-01-12 17:07:00
  • 微信小程序-拍照或选择图片并上传文件

    2023-09-04 20:22:45
  • python广度优先搜索得到两点间最短路径

    2023-09-05 02:06:24
  • keras输出预测值和真实值方式

    2021-11-26 20:25:18
  • asp实现的查询某关键词在MSSQL数据库位置的代码

    2011-02-28 11:18:00
  • python使用opencv在Windows下调用摄像头实现解析

    2021-01-08 04:13:01
  • Sql server中时间查询的一个比较快的语句

    2008-12-29 14:16:00
  • msxml3.dll 错误 ‘800c0005’解决方案

    2009-10-05 18:36:00
  • Python之ascii转中文的实现

    2023-08-24 19:39:12
  • 在PHP中操作文件的扩展属性

    2023-07-22 06:49:20
  • 解决jupyter notebook图片显示模糊和保存清晰图片的操作

    2022-08-20 12:53:59
  • python如何往列表头部和尾部添加元素

    2021-12-17 07:05:17
  • python+Word2Vec实现中文聊天机器人的示例代码

    2023-08-04 13:11:29
  • python 获取et和excel的版本号

    2022-05-03 09:24:51
  • python3爬取淘宝信息代码分析

    2021-05-03 04:59:11
  • 通过T-SQL语句实现数据库备份与还原的代码

    2011-12-01 08:02:15
  • opencv python模糊影像检测效果

    2021-07-27 04:44:13
  • javascript模拟php函数in_array

    2023-10-15 22:12:49
  • keras topN显示,自编写代码案例

    2021-03-19 03:15:13
  • asp之家 网络编程 m.aspxhome.com