鱼C论坛

 找回密码
 立即注册
查看: 1896|回复: 2

[技术交流] 上下文管理器VS装饰器

[复制链接]
发表于 2018-5-26 19:11:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
使用上下文管理器可以方便的在封装体内部做一些事情,Python中最典型的上下文管理器应用就是在文件那块了,例如要打开一个文件并对其进行写操作:with open('file.txt', 'w') as f:#do something...,这样写起来不仅优雅而且容错性较强;我们可以实现自己的上下文管理器,如果一个类实现了__enter__和__exit__,即进出口函数就称为上下文管理器。
装饰器不必多说,起到了一个修饰被装饰函数的作用。

不管是上下文管理器还是装饰器,都在[原函数]执行前后额外的执行一些东西。

总之,上下文管理器和装饰器在某些方面比较相像。空口无凭,下面让我们根据一个实际需求看看二者的联系和区别
需求:让函数具有计时功能,具体被修饰函数自选
四张图中前两张是实现进出口函数调用上下文管理器对象,后两张使用参数封装的装饰器函数。


另,如果是要给像fib()这样具有返回值的函数添加计时功能,貌似只能用上下文管理器写,否则会因为提前return而不打印时间。

最后:欢迎大家讨论 :-)
屏幕快照 2018-05-26 18.39.53.png
屏幕快照 2018-05-26 18.40.56.png
屏幕快照 2018-05-26 18.42.33.png
屏幕快照 2018-05-26 18.48.14.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-5-26 19:16:00 | 显示全部楼层

回帖奖励 +1 鱼币

装饰器是函数,而上下文管理器是类
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-14 12:04:55 | 显示全部楼层
谢谢分享.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 06:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表