with上下文管理器

  任何实现了 enter() 和 exit() 方法的对象都可称之为上下文管理器,上下文管理器对象可以使用 with 关键字。
  
如果一个一个文件使用普通方式打开:

def m1():f = open("output.txt", "w")f.write("python之禅")f.close()

如果程序执行中碰到错误,会退出程序,可能没有执行f.close(),会造成系统资源的浪费。

如果使用with方式:

with File('out.txt', 'w') as f:print("writing")f.write('hello, python')

如果程序执行中碰到错误,会自动关闭文件。

自定义上下文管理器:

class File():def __init__(self, filename, mode):self.filename = filenameself.mode = modedef __enter__(self):print("entering")self.f = open(self.filename, self.mode)return self.fdef __exit__(self, *args):print("will exit")self.f.close()

实现上下文管理器的另一种方式:

from contextlib import contextmanager@contextmanager
def my_open(path, mode):f = open(path, mode)yield ff.close()

  Python 还提供了一个 contextmanager 的装饰器,更进一步简化了上下文管理器的实现方式。通过 yield 将函数分割成两部分,yield 之前的语句在 enter 方法中执行,yield 之后的语句在 exit 方法中执行。紧跟在 yield 后面的值是函数的返回值。
  
调用:

with my_open('out.txt', 'w') as f:f.write("hello , the simplest context manager")

Python高级——with上下文管理器相关推荐

  1. python教程:上下文管理器详细教程

    我想你对 Python 中的with语句一定不陌生,尤其是在文件的读写操作中,不过我想,大部分人可能习惯了它的使用,却并不知道隐藏在其背后的"秘密". 那么,究竟with语句要怎么 ...

  2. python 什么是上下文管理器(ContextManager)?

    上下文是 context 直译的叫法,在程序中用来表示代码执行过程中所处的前后环境.上下文管理器中有 enter 和 exit 两个方法,以with为例子,enter 方法会在执行 with 后面的语 ...

  3. 深入理解 Python 中的上下文管理器

    图|李思瑶 文|MING 提示:前面的内容较为基础,重点知识在后半段. with 这个关键字,对于每一学习Python的人,都不会陌生. 操作文本对象的时候,几乎所有的人都会让我们要用 with op ...

  4. python异常处理与上下文管理器

    python异常处理 异常与错误 错误 可以通过IDE或者解释器给出提示的错误 opentxt('a.jpg','r') 语法层面没有问题,但是自己代码的逻辑有问题 if age>18: pri ...

  5. python 计时器_Python上下文管理器的魔力

    点击关注我哦 一篇文章带你了解Python上下文管理器的魔力 小编将为您准备一份很棒的Python上下文管理器使用指南,这将使您的代码更具可读性和可靠性,降低您的错误发生率. 资源管理器是我们在任何编 ...

  6. python中实现上下文管理器的两种方法

    上下文管理器: python中实现了__enter__和__exit__方法的对象就可以称之为上下文管理器 实现方法一举例: def File(object): def __init__(self, ...

  7. python知识点:上下文管理器[__enter__ 和 __exit__ ]

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/reallocing1/article/details/64526895 上下文管理器(context ...

  8. Python进阶(上下文管理器与with语句)

    /*上下文管理器必须有__enter__和__exit__方法*/ class MyResource:def __enter__(self):print('链接资源')return self/*__e ...

  9. python进入上下文管理器_浅谈Python中with(上下文管理器)的用法

    例子一 首先来看一段代码: classFoo(object):def __init__(self):print('实例化一个对象')def __enter__(self):print('进入')def ...

最新文章

  1. 解决ModuleNotFoundError: No module named ‘pip‘问题
  2. Gson把对象转成json格式的字符串
  3. 安全公司:苹果iOS10备份功能安全性比iOS9差很多
  4. 泛型 与 实体类的相互转换
  5. LeetCode(30):与所有单词相关联的字串
  6. 删除主串中模式串出现的字符
  7. iPad上面的扫描加水印免费软件推荐
  8. postman设置带token的请求
  9. 014箱子开合并移动
  10. centos桥接模式怎么联网_今日回收 | 互联网+废品回收模式是怎么兴起的呢?
  11. C++笔记-基于邻接表的BFS(宽度优先遍历)
  12. mycat 分布式mysql_MySQL 部署分布式架构 MyCAT (五)
  13. python报数组越界_【问题汇总】列表数组越界的问题
  14. 高盛集团:金融科技布局
  15. InnoSetup 制作安装包进阶版
  16. 底层网工、0基础、记性差,学习CCIE/HCIE,到底是啥体验?
  17. 第九节 html特殊文字符号
  18. 内存卡没有Android,安卓内存卡读不出来怎么办
  19. 【Python 3.7】分子运动:修改 rw_visual.py,将其中的 plt.scatter() 替换为 plt.plot() 。为 模拟花粉在水滴表面的运动路径
  20. C/C++时间字符串和时间戳的相互转化

热门文章

  1. Cisco IOS Unicast NAT 工作原理 [一]
  2. 《迷人的8051单片机》---3.2 语句
  3. Resid 学习笔记1-基础命令
  4. 使用Linux命令行测试网速
  5. java 枚举类型知识点记录
  6. iOS 开发屏幕适配尺寸
  7. global.asax不执行原因
  8. nginx反向代理初探
  9. Spring5 新特性
  10. Redis面试 - 集群模式