ABC23 发表于 2018-5-26 19:11:58

上下文管理器VS装饰器

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

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

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

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

最后:欢迎大家讨论 :-)

hereiam 发表于 2018-5-26 19:16:00

装饰器是函数,而上下文管理器是类{:5_106:}

billunique 发表于 2022-1-14 12:04:55

谢谢分享.
页: [1]
查看完整版本: 上下文管理器VS装饰器