如何理解两个很实用的Python装饰器
发表于:2024-11-24 作者:千家信息网编辑
千家信息网最后更新 2024年11月24日,本篇文章给大家分享的是有关如何理解两个很实用的Python装饰器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.超时函数这个函数的作用
千家信息网最后更新 2024年11月24日如何理解两个很实用的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安全错误
数据库的锁怎样保障安全
知识经验数据库建设
网络技术公司的无形资产
云和县电子政务网络安全服务项目
中信银行总行软件开发薪资
澳洲的网络安全问题
网络安全培训一些什么内容
服务器 xmlhttp
在线旅游业网络安全问题
共生网络技术服务公司
服务器设置远程桌面连接
超级课堂网络技术
网络安全法学习心得2021
购物类网站数据库设计
网络安全建设性原则
厦门网络安全宣传
致爱空间旅业网络技术
计算机网络技术可考公务员吗
服务器配额管理
我的网络安全征文作文
高级数据库技术教程
知识经验数据库建设
在软件开发过程中的重要性
mi rbase数据库
网络安全值班事故问责机制
碰胡软件开发闲趣
大专学cc 软件开发工程师
做软件开发的工作描述
北京中鸿网络技术有限公司
ora清除表空间的数据库
本地服务器erp对接钉钉会慢吗