美文网首页
python学习笔记之--简单实用的with语句

python学习笔记之--简单实用的with语句

作者: itsenlin | 来源:发表于2022-04-15 00:30 被阅读0次

引子

在学习文件操作时,学习到一个with语句,可以实现自动关闭文件操作,而不需要手动的增加异常处理以及显示的调用close来关闭文件。这样即减少了遗漏关闭文件导致的资源泄漏,代码结构也更易于理解维护,文件操作一节使用的例子如下

with open("test.txt") as f:
    for line in f:
        print(line)

在退出with语句时,不管是正常退出,还是出现异常,文件都会被正常关闭。

上下文管理器

上下文管理器是这样一个对象:定义程序运行时需要建立的上下文,处理程序的进入和退出。即用来创建一个运行时环境。

上下文管理器对象需要实现两个方法:

  • __enter__(),进入运行时的上下文,返回运行时上下文相关的对象,即处理程序的进入。
  • __exit__(exception_type, exception_value, traceback),退出运行时上下文,定义在块执行(或终止)之后上下文管理器应该做的动作。像前面说的关闭文件

实现了这两个方法的对象都可以称为一个上下文管理器,也可以用在with语句中。也即可以自定义上下文管理器类,并使用with语句来简化使用。

最常用的还是文件操作,和网络socketr操作。

with语句分析

语法

with expr [as target]:
    code

with语句可以嵌套使用,如下

with expr1 as e1:
    --code--
    with expr2 as e2:
        --code--

with语句执行过程

  1. 计算表达式的值,返回一个上下文管理器对象。
  2. 加载上下文管理器对象的__exit__()方法以备后用。
  3. 调用上下文管理器对象的__enter__()方法。
  4. 如果使用了[as target],则将__enter__()的返回值赋值给target
  5. 执行with语句中的代码块。
  6. 如果步骤5中代码正常结束,调用__exit__()方法并忽略返回值。
  7. 如果步骤5中代码执行异常,调用__exit__()方法,并将异常类型、值、traceback信息作为参数传递给此方法并判断返回值:如果为false则异常重新抛出;如果为true异常被挂起,程序继续执行。

参考

本节参数书箱《编写高质量代码--改善python程序的91个建议》

相关文章

网友评论

      本文标题:python学习笔记之--简单实用的with语句

      本文链接:https://www.haomeiwen.com/subject/yoixertx.html