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,装饰器
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
MSSQL数据加密解密代码
2023-07-08 18:45:30
如何在网页显示英语音标(附实例)
2010-01-12 17:07:00
![](https://img.aspxhome.com/file/UploadPic/20101/12/ipa_logo-93s.jpg)
微信小程序-拍照或选择图片并上传文件
2023-09-04 20:22:45
![](https://img.aspxhome.com/file/2023/5/56275_0s.jpg)
python广度优先搜索得到两点间最短路径
2023-09-05 02:06:24
![](https://img.aspxhome.com/file/2023/1/88981_0s.jpg)
keras输出预测值和真实值方式
2021-11-26 20:25:18
![](https://img.aspxhome.com/file/2023/9/83689_0s.jpg)
asp实现的查询某关键词在MSSQL数据库位置的代码
2011-02-28 11:18:00
python使用opencv在Windows下调用摄像头实现解析
2021-01-08 04:13:01
![](https://img.aspxhome.com/file/2023/2/82782_0s.jpg)
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
![](https://img.aspxhome.com/file/2023/0/62600_0s.png)
在PHP中操作文件的扩展属性
2023-07-22 06:49:20
解决jupyter notebook图片显示模糊和保存清晰图片的操作
2022-08-20 12:53:59
![](https://img.aspxhome.com/file/2023/2/76782_0s.jpg)
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
![](https://img.aspxhome.com/file/2023/6/80716_0s.jpg)
javascript模拟php函数in_array
2023-10-15 22:12:49
keras topN显示,自编写代码案例
2021-03-19 03:15:13