老狗——Python中的With...as语句

一、语法

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.txt,f变量接收文件对象返回的对象;
读取文本中的内容,逐行打印;
with中的代码执行完成后,会自动关闭文件;
如果with语句中没有做try…except异常处理,出现错误时会直接将异常交给Python解释器抛出,不会自动关闭文件,如果做了try…except异常处理,出现异常时,会自动关闭文件,再抛出异常。

三、原理

1、with语句实质上是上下文管理

  • 上下文管理协议:包含2个方法:enter__和__exit
  • 支持该协议的对象,要实现这2个方法,才能被with语句进行操作。

2、上下文管理器

  • 定义执行with语句时建立的运行时上下文,负责执行with语句上下文的进入和退出操作;
  • 进入上下文管理器:调用管理器__enter__方法,如果设置了as var语句,变量var接受__enter__方法的返回值;
  • 退出上下文管理器:调用管理器的__exit__方法。

四、应用场景

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值