如何理解两个很实用的Python装饰器
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,本篇文章给大家分享的是有关如何理解两个很实用的Python装饰器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.超时函数这个函数的作用
千家信息网最后更新 2025年11月15日如何理解两个很实用的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安全错误
数据库的锁怎样保障安全
服务器共享权限设置
贵州品质软件开发推广
邮件服务器主机地址
济南erp软件开发哪家公司好
方舟服务器手游狮鹫怎么训
在数据库中主键和主码一样吗
通州区品牌软件开发
网络安全知识记心中手抄报
然后服务器是什么
服务器远程管理有哪些
武汉卡有路网络技术
物流配送网络技术
天津信息化软件开发服务参考价格
kisti 网络安全 ai
网络安全准入终端安全产品
软件开发类创业
关系数据库完整性规则
广东网络技术转让供应商
服务器空间无法启动
陕西工商学院网络安全
直播软件开发论坛
网络安全主题班会的总结
数据库删库命令rm f
芳心草互联网科技
2021年合肥网络安全宣传周
arm 服务器 华为
dayz单机服务器怎么设置
虚拟机模拟云服务器
mc服务器管理员有哪些权限
萤石小米网络安全