关于python中with语句的粗浅认识

关于python中with语句的粗浅认识,第1张

概述上下文管理管理器:资源使用完成的释放很重要,python中使用上下文管理器来自动分配并释放资源。with语句 *** 作对象就为一个上下文管理器对象。基于类的上下文管理器的:使用类定义一个文件的上下文管理器对象,代码如下:当被with语句使用时会依次执行__init__(),__enter__()方法和__exi

上下文管理管理器:资源使用完成的释放很重要,python中使用上下文管理器来自动分配并释放资源。with语句 *** 作对象就为一个上下文管理器对象。

基于类的上下文管理器的:

使用类定义一个文件的上下文管理器对象,代码如下:当被with语句使用时会依次执行__init__(),__enter__()方法和__exit__()。

 1 class fileType: 2     """ 3     使用类创建上下文管理器时必须包含__enter__()和__exit__()方法 4     """ 5     def __init__(self, name, mode): 6         self.name = name 7         self.mode = mode 8         self.file = None 9 10     def __enter__(self):11         """12         获取要 *** 作的资源并且返回13         :return:返回需要被管理的资源14         """15         self.file = open(self.name,self.mode)16         return self.file17 18     def __exit__(self, exc_type, exc_val, exc_tb):19         """20         对资源的释放或者清理 *** 作放在此方法里面21         :param exc_type:异常类型22         :param exc_val:异常值23         :param exc_tb:异常错误栈信息24         :return:当返回值为True时,表示告诉python解释器异常已经捕获无需再抛出异常25         """26         if exc_type:27             print(f'exc_type: {exc_type}')28         if self.file:29             self.file.close()
VIEw Code

with语句执行上下文管理器:

1 file_manager = fileType("text.txt", "w")2 # 使用with执行这个文件上下文管理器3 with file_manager as f:4     f.write("this is my test.")

基于生成器的上下文管理器:

使用生成器定义上下文管理器,用以支持with语句。其实装饰器内做了处理,也引入了__enter__()和__exit__(),若忘记装饰器则会报错,装饰器的具体实现过程可以查看源码了解。
 1 from contextlib import contextmanager 2  3  4 @contextmanager 5 def file_manager(name, mode): 6     try: 7         f = open(name, mode) 8         yIEld f 9     finally:10         f.close()11 12 13 with file_manager('test.txt', 'w') as f:14     f.write('hello world')

总结:

with语句 *** 作上下文管理器对象;上下文管理器对象中有打开资源和关闭清理资源的方法,且含有抛出异常功能,注意当不需要抛出异常时,可让返回值为True;基于类的上下文管理器适合大型系统开发,基于生成器的上下文管理器更加方便简洁,适用于中小程序开发;

 

总结

以上是内存溢出为你收集整理的关于python中with语句的粗浅认识全部内容,希望文章能够帮你解决关于python中with语句的粗浅认识所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1186337.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存