在写代码过程中,我们一般会有这样的问题,如文件描述符打开,关闭,锁的加锁,解锁,一旦缺少任何一环都会对系统造成严重影响,如果不能正确关闭描述符,就会导致可用的描述符数量急剧下降,如果不能正常解锁,会导致严重的死锁问题。

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 的用法和原理相关推荐

  1. pythond的执行原理_深入理解Python 关于supper 的 用法和原理

    一.前言 Python 面向对象中有继承这个概念,初学时感觉很牛逼,里面也有个super类,经常见到,最近做一些题才算是理解了.特地记录分享给后来研究的小伙伴,毕竟现在小学生都开始学了(滑稽脸) 二. ...

  2. python装饰器原理-python 中的装饰器及其原理

    装饰器模式 此前的文章中我们介绍过装饰器模式: 装饰器模式中具体的 Decorator 实现类通过将对组建的请求转发给被装饰的对象,并在转发前后执行一些额外的动作来修改原有的部分行为,实现增强 Com ...

  3. python中的str方法和repr方法_Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些

    Python中 的 __str__ 方法和 __repr__ 方法的区别有哪些 发布时间:2020-11-05 17:11:48 来源:亿速云 阅读:95 作者:Leah 本篇文章给大家分享的是有关P ...

  4. Python中布尔类型 短路计算原理

    Python支持布尔类型的数据,布尔类型只有True和False两种值,但是布尔类型有以下几种运算: 与运算:只有两个布尔值都为 True 时,计算结果才为 True. True and True # ...

  5. Python 关于super 的 用法和原理(挖坑)

    一.前言 Python 面向对象中有继承这个概念,初学时感觉很牛逼,里面也有个super类,经常见到,最近做一些题才算是理解了.特地记录分享给后来研究的小伙伴,毕竟现在小学生都开始学了(滑稽脸) 二. ...

  6. Opencv或python中图像与三维数组原理

    炒鸡详细的图像原理以及成像原理讲解,不仅仅是python 一个OpenCV小白的自我成长之路(^_*) 1.光--可见光 我们日常见到的光五颜六色,赤橙黄绿青蓝紫,谁持彩练当空舞.不好意思,情不自禁啊 ...

  7. python中的format方法和int方法

    一.背景 我们在进行计算机进制转换的时候需要用到一些其他的进制,最常见的就是二进制,八进制,16进制.这里介绍两种方法去完成进制之间的转换. 二.使用 1 format方法 format方法中包含两个 ...

  8. python中8大排序(原理+代码)

    常用的排序方法:冒泡排序.选择排序.插入排序.快速排序.堆排序.归并排序 冒泡排序(Bubble Sort): 比较相邻的元素.如果第一个比第二个大(升序),就交换他们两个. 对每一对相邻元素作同样的 ...

  9. python中的str方法和repr方法_详解Python中__str__和__repr__方法的区别

    对我当前工程进行全部测试需要花费不少时间.既然有 26 GB 空闲内存,为何不让其发挥余热呢? tmpfs 可以通过把文件系统保存在大内存中来加速测试的执行效率. 但优点也是缺点,tmpfs 只把结果 ...

最新文章

  1. Linux Shell执行原理
  2. html与css知识总结,html和css知识总结(示例代码)
  3. python爬虫框架排行榜-Python爬虫框架--pyspider初体验
  4. python 错误、调试、单元测试、文档测试
  5. ng-init,ng-controller,ng-model
  6. 数据库oracle文件怎么打开,Oracle某个数据文件损坏,如何打开数据库-数据库专栏,ORACLE...
  7. python 获取当天和前几天时间数据(亲测)
  8. Ajax基本案例详解之load的实现
  9. 《剑指offer》全解(图文结合,通俗易懂,一篇看爽)
  10. java链式结构_java语言实现队列顺序结构与链式结构
  11. MySQL基础2——表的约束
  12. 微服务(接口)设计原则
  13. Golang1.8新特性展望及2016发展回顾
  14. C#图片动画效果(旋转360度)异步
  15. 【转】计算机视觉简介
  16. java设计模式4-装饰者模式
  17. Android应用开发-MP3音乐播放器代码实现(三)
  18. 降低软件复杂性的一般原则和方法
  19. 安装office未能启动服务器,Office 2010安装时遇到1920错误问题怎么解决?
  20. intel第6代服务器芯片,Intel第六代处理器 Skylake CPU、GPU、主板完全解析

热门文章

  1. mysql编码转换工具_MySQL GBK→UTF-8编码转换
  2. json格式转csv文件
  3. 计算机指令vbs,使用vbs命令启动CMD指定命令
  4. 数字藏品的生意没那么好做
  5. 【深度学习模型】智云视图中文车牌识别源码解析(二)
  6. PMP考试成绩查询、证书下载流程
  7. 3.3找到数组中最小值及其下标
  8. word删除不了最后一页怎么办?【已解决】
  9. Pytorch基本用法 乘法函数详解:5个张量乘法function
  10. 全球空气净化器排行榜 有哪些品牌