python 中 with 的用法和原理
在写代码过程中,我们一般会有这样的问题,如文件描述符打开,关闭,锁的加锁,解锁,一旦缺少任何一环都会对系统造成严重影响,如果不能正确关闭描述符,就会导致可用的描述符数量急剧下降,如果不能正常解锁,会导致严重的死锁问题。
python中存在一个用法:with,可以帮助我们自动的进行资源的获取和释放,从而避免上述问题。
with的原理:
with在执行的时候,会执行紧随其后的代码,并调用该对象的__enter__方法, 执行相关操作,如果出现异常,或者代码执行结束,则会自动调用__exit__方法,进行资源的清理。有点类似于C++中的智能指针。
用法如下:
我们可以自己定义一个类,实现对应的两个方法就可以,并在方法中添加代码
class sample(object):
def __enter__(self):
print "__enter__"
return self
def __exit__(self,exc_type,exc_val,exc_tb): #参数为异常信息
print "__exit__"
print "type: ", exc_type
print "val: ", exc_val
print "tb: ", exc_tb
def do_something(self):
print "do_something"
with sample() as sam:
print "sample:",sam.do_something()
输出结果如下:
__enter__
sample: do_something
None
__exit__
type: None
val: None
tb: None
python 中 with 的用法和原理相关推荐
- pythond的执行原理_深入理解Python 关于supper 的 用法和原理
一.前言 Python 面向对象中有继承这个概念,初学时感觉很牛逼,里面也有个super类,经常见到,最近做一些题才算是理解了.特地记录分享给后来研究的小伙伴,毕竟现在小学生都开始学了(滑稽脸) 二. ...
- python装饰器原理-python 中的装饰器及其原理
装饰器模式 此前的文章中我们介绍过装饰器模式: 装饰器模式中具体的 Decorator 实现类通过将对组建的请求转发给被装饰的对象,并在转发前后执行一些额外的动作来修改原有的部分行为,实现增强 Com ...
- python中的str方法和repr方法_Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些
Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些 发布时间:2020-11-05 17:11:48 来源:亿速云 阅读:95 作者:Leah 本篇文章给大家分享的是有关P ...
- Python中布尔类型 短路计算原理
Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算: 与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and True # ...
- Python 关于super 的 用法和原理(挖坑)
一.前言 Python 面向对象中有继承这个概念,初学时感觉很牛逼,里面也有个super类,经常见到,最近做一些题才算是理解了.特地记录分享给后来研究的小伙伴,毕竟现在小学生都开始学了(滑稽脸) 二. ...
- Opencv或python中图像与三维数组原理
炒鸡详细的图像原理以及成像原理讲解,不仅仅是python 一个OpenCV小白的自我成长之路(^_*) 1.光--可见光 我们日常见到的光五颜六色,赤橙黄绿青蓝紫,谁持彩练当空舞.不好意思,情不自禁啊 ...
- python中的format方法和int方法
一.背景 我们在进行计算机进制转换的时候需要用到一些其他的进制,最常见的就是二进制,八进制,16进制.这里介绍两种方法去完成进制之间的转换. 二.使用 1 format方法 format方法中包含两个 ...
- python中8大排序(原理+代码)
常用的排序方法:冒泡排序.选择排序.插入排序.快速排序.堆排序.归并排序 冒泡排序(Bubble Sort): 比较相邻的元素.如果第一个比第二个大(升序),就交换他们两个. 对每一对相邻元素作同样的 ...
- python中的str方法和repr方法_详解Python中__str__和__repr__方法的区别
对我当前工程进行全部测试需要花费不少时间.既然有 26 GB 空闲内存,为何不让其发挥余热呢? tmpfs 可以通过把文件系统保存在大内存中来加速测试的执行效率. 但优点也是缺点,tmpfs 只把结果 ...
最新文章
- Linux Shell执行原理
- html与css知识总结,html和css知识总结(示例代码)
- python爬虫框架排行榜-Python爬虫框架--pyspider初体验
- python 错误、调试、单元测试、文档测试
- ng-init,ng-controller,ng-model
- 数据库oracle文件怎么打开,Oracle某个数据文件损坏,如何打开数据库-数据库专栏,ORACLE...
- python 获取当天和前几天时间数据(亲测)
- Ajax基本案例详解之load的实现
- 《剑指offer》全解(图文结合,通俗易懂,一篇看爽)
- java链式结构_java语言实现队列顺序结构与链式结构
- MySQL基础2——表的约束
- 微服务(接口)设计原则
- Golang1.8新特性展望及2016发展回顾
- C#图片动画效果(旋转360度)异步
- 【转】计算机视觉简介
- java设计模式4-装饰者模式
- Android应用开发-MP3音乐播放器代码实现(三)
- 降低软件复杂性的一般原则和方法
- 安装office未能启动服务器,Office 2010安装时遇到1920错误问题怎么解决?
- intel第6代服务器芯片,Intel第六代处理器 Skylake CPU、GPU、主板完全解析