python with关键字

冷不防 2022-09-08 03:39 253阅读 0赞

with表达式其实是try-finally的简写形式。但是又不是全相同。

  1. #格式
  2. with context [as var]:
  3. pass
  4. """ :param context是一个表达式,返回的是一个对象 :param var 用来保存context表达式返回的对象,可以有单个或者多个返回值 """

表达式open(‘1.txt’)返回是一个_io.TextIOWrapper 类型的变量用f接受到。在with语句块中就可以使用这个变量操作文件。执行with这个结构之后。f会自动关闭。相当于自带了一个finally。
但是with本身并没有异常捕获的功能,但是如果发生了运行时异常,它照样可以关闭文件释放资源。

  1. with open('1.txt') as f:
  2. print(f.read())
  3. print(f.closed)

这个例子可以看出with发生了异常也会关闭程序

  1. try:
  2. with open('1.txt') as f2:
  3. print(f2.read())
  4. f2.seek(-5,os.SEEK_SET)
  5. except ValueError as e:
  6. print("error")
  7. print(f2.closed)

原理

  1. """ with 语句实质是上下文管理。 1、上下文管理协议。包含方法__enter__() 和 __exit__(),支持该协议对象要实现这两个方法。 2、上下文管理器,定义执行with语句时要建立的运行时上下文,负责执行with语句块上下文中的进入与退出操作。 3、进入上下文的时候执行__enter__方法,如果设置as var语句,var变量接受__enter__()方法返回值。 4、如果运行时发生了异常,就退出上下文管理器。调用管理器__exit__方法。 """

应用场景

  1. """ 1、文件操作。 2、进程线程之间互斥对象。 3、支持上下文其他对象 """

作者:skullfang
链接:https://www.jianshu.com/p/5b01fb36fd4c
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

发表评论

表情:
评论列表 (有 0 条评论,253人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Python with关键字原理详解

    引言 > 对于正确的处理涉及到异常的资源管理时,需要使用 `try/finally` 代码结构,这样的结构一多会导致整体代码结构 很臃肿繁琐,不易读、不美观,因此在 Py