Python中的With...as语句

一、语法··1

with context as var:
    with_suite
  • with语句:可以代替try...except...finally语句,使代码更加简洁;
  • context:通常是表达式,返回一个对象;
  • var变量:用来保存context返回的对象,可以是单个值或元组;
  • with_suite:使用变量var对context返回对象进行各种操作的代码段
     

二、示例

# 查看文件内容
XZ:learn xz$ cat with.txt 
with...as...
12345
abcde

In [2]: with open('with.txt','r+') as f:
   ...:     for line in f.readlines():
   ...:         print(line)
   ...: print('with is closed : ', f.closed)
   ...: 
   ...: 
with...as...
12345
abcde
with is closed :  True
  • 打开文本with.txtf变量接收文件对象返回的对象;
  • 读取文本中的内容,逐行打印;
  • with中的代码执行完成后,会自动关闭文件;
  • 如果with语句中没有做try...except异常处理,出现错误时会直接将异常交给Python解释器抛出,不会自动关闭文件,如果做了try...except异常处理,出现异常时,会自动关闭文件,再抛出异常。
     

三、原理

  1. with语句实质上是上下文管理
  • 上下文管理协议:包含2个方法:__enter____exit__
  • 支持该协议的对象,要实现这2个方法,才能被with语句进行操作。
  1. 上下文管理器
  • 定义执行with语句时建立的运行时上下文,负责执行with语句上下文的进入和退出操作;
  • 进入上下文管理器:调用管理器__enter__方法,如果设置了as var语句,变量var接受__enter__方法的返回值;
  • 退出上下文管理器:调用管理器的__exit__方法。
     

四、应用场景

  1. 文件操作
  2. 进程线程之间互斥对象,如互斥锁
  3. 自定义的支持上下文的其它操作

 

你可能感兴趣的:(Python中的With...as语句)