如何理解两个很实用的Python装饰器
发表于:2025-02-19 作者:千家信息网编辑
千家信息网最后更新 2025年02月19日,本篇文章给大家分享的是有关如何理解两个很实用的Python装饰器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1.超时函数这个函数的作用
千家信息网最后更新 2025年02月19日如何理解两个很实用的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安全错误
数据库的锁怎样保障安全
社区网络安全签名活动
西城区一站式网络技术诚信推荐
如何企业构建数据库
吉林正规软件开发服务标准
火舞软件开发什么游戏
介绍一下亚马逊服务器
前端的数据怎么到数据库中
软件开发阶段信息报道
云计算网络技术书籍
计算机网络技术上哪个学校
企业无线网络安全吗
金仓数据库修改最大连接数
数据库应用课程实训报告
网络安全周 2017
国家网络安全周报告
云南腾创网络技术
求生之路二怎样屏蔽服务器
xss的风险发生在数据库中
北京有道网络技术
mysql中的数据库模式
网络安全da sai
DNA家族数据库破陈年积案
计算机网络安全ppt免费
apache静态服务器
江西智能化软件开发零售价
中牟软件开发项目管理
自学软件开发需要考证吗
idc服务器提供商涉嫌诈骗赌博
虹口区常规网络技术服务业务流程
虚拟云桌面服务器能监控哪些指标