上下文管理器VS装饰器
使用上下文管理器可以方便的在封装体内部做一些事情,Python中最典型的上下文管理器应用就是在文件那块了,例如要打开一个文件并对其进行写操作:with open('file.txt', 'w') as f:#do something...,这样写起来不仅优雅而且容错性较强;我们可以实现自己的上下文管理器,如果一个类实现了__enter__和__exit__,即进出口函数就称为上下文管理器。装饰器不必多说,起到了一个修饰被装饰函数的作用。
不管是上下文管理器还是装饰器,都在[原函数]执行前后额外的执行一些东西。
总之,上下文管理器和装饰器在某些方面比较相像。空口无凭,下面让我们根据一个实际需求看看二者的联系和区别
需求:让函数具有计时功能,具体被修饰函数自选
四张图中前两张是实现进出口函数调用上下文管理器对象,后两张使用参数封装的装饰器函数。
另,如果是要给像fib()这样具有返回值的函数添加计时功能,貌似只能用上下文管理器写,否则会因为提前return而不打印时间。
最后:欢迎大家讨论 :-) 装饰器是函数,而上下文管理器是类{:5_106:} 谢谢分享.
页:
[1]