如何理解两个很实用的Python装饰器
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章给大家分享的是有关如何理解两个很实用的Python装饰器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.超时函数这个函数的作用
千家信息网最后更新 2026年11月03日如何理解两个很实用的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安全错误
数据库的锁怎样保障安全
互联网与科技
互联网科技工作委员会副主任毛军
科技互联网龙头
科技股互联网
智能科技公司是互联网公司吗
合肥互联网科技公司
上海挚品互联网科技
汇久创客互联网科技
互联网科技汛
中国互联网有什么科技含量
互联网科技寓意
昭通云南众福互联网科技有限公司
明优互联网科技有限公司
伊宁互联网科技做什么的
为客找房互联网科技公司怎么样
伍佰万互联网科技怎么赚钱
互联网科技包装股份有限公司上市
九思连强互联网电子科技有限公司
长沙渺峰互联网科技有限公司
互联网科技对化妆品行业
咖啡网
云信互联网科技有限公司
美国互联网科技巨头监管
未来的互联网科技
承德科技产业互联网发展
中国互联网十大科技股排名
互联网金融科技元年
2021世界互联网领先科技成果发布
九思连强互联网电子科技有限公司
保山互联网科技靠谱吗