如何理解两个很实用的Python装饰器
发表于:2025-02-21 作者:千家信息网编辑
千家信息网最后更新 2025年02月21日,本篇文章给大家分享的是有关如何理解两个很实用的Python装饰器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.超时函数这个函数的作用
千家信息网最后更新 2025年02月21日如何理解两个很实用的Python装饰器
本篇文章给大家分享的是有关如何理解两个很实用的Python装饰器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
1.超时函数
这个函数的作用在于可以给任意可能会hang住的函数添加超时功能,这个功能在编写外部API调用 、网络爬虫、数据库查询的时候特别有用
timeout装饰器的代码如下:
import signal,functools #下面会用到的两个库 class TimeoutError(Exception): pass #定义一个Exception,后面超时抛出 def timeout(seconds, error_message = 'Function call timed out'): def decorated(func): def _handle_timeout(signum, frame): raise TimeoutError(error_message) def wrapper(*args, **kwargs): signal.signal(signal.SIGALRM, _handle_timeout) signal.alarm(seconds) try: result = func(*args, **kwargs) finally: signal.alarm(0) return result return functools.wraps(func)(wrapper) return decorated
使用:
@timeout(5) #限定下面的slowfunc函数如果在5s内不返回就强制抛TimeoutError Exception结束 def slowfunc(sleep_time): import time time.sleep(sleep_time) #这个函数就是休眠sleep_time秒 slowfunc(3) #sleep 3秒,正常返回 没有异常slowfunc(10) #被终止
## 输出
---------------------------------------------------------------------------
TimeoutError Traceback (most recent call last)
2.Trace函数
有时候出于演示目的或者调试目的,我们需要程序运行的时候打印出每一步的运行顺序 和调用逻辑。类似写bash的时候的bash -x调试功能,然后Python解释器并没有 内置这个时分有用的功能,那么我们就"自己动手,丰衣足食"。
Trace装饰器的代码如下:
'''学习中遇到问题没人解答?小编创建了一个Python学习交流群:725638078寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''import sys,os,linecachedef trace(f): def globaltrace(frame, why, arg): if why == "call": return localtrace return None def localtrace(frame, why, arg): if why == "line": # record the file name and line number of every trace filename = frame.f_code.co_filename lineno = frame.f_lineno bname = os.path.basename(filename) print("{}({}): {}".format( bname, lineno, linecache.getline(filename, lineno).strip('\r\n')),) return localtrace def _f(*args, **kwds): sys.settrace(globaltrace) result = f(*args, **kwds) sys.settrace(None) return result return _f
使用:
@tracedef xxx(): print (1) print (22) print (333)xxx() #调用
## 输出
(3): print 1 # @trace 的输出
1(4): print 22 # @trace 的输出
22(5): print 333 # @trace 的输出
333
以上就是如何理解两个很实用的Python装饰器,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
函数
输出
功能
学习
实用
两个
时候
代码
就是
更多
有用
目的
知识
篇文章
运行
不错
丰衣足食
志同道合
互帮
互帮互助
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
专科专业计算机网络技术与应用
张家界正规软件开发中介
网络公司租服务器多少钱
上海亿赛通公司网络安全职位
assecc转换数据库
网络技术网络诈骗
apipost 操作数据库
数据库面试自我介绍模板
广州大行情网络技术有限公司
数据库和帆软数据不一致
福州新华互联网科技
学校查重检测是用哪个数据库啊
北境之地正在尝试连接服务器
大数据软件开发技术是什么
网络安全只有省赛吗
如何使用数据库制作大量文件
网络安全法宣传卡
网络安全接单查询
线上数据库权限
数据库模糊查询和分页
一品威客网软件开发
彦成互联网科技
我的世界服务器移动受限
泉州玖耀网络技术有限公司
vpn服务器账号
网络安全 启明信息
重庆巫山果蔬配送软件开发
python界面数据库框架
机器人网络技术
网络安全技术与实例