Python with常见用法以及详解

在面试中被问到:with原理?常见用法是什么?有哪些使用场景?由于事先没有刷面试题,当时那个懵,只回答了常用with来打开文件,事后回想,懊恼不已,由此有了这篇文章,用以记录。

1、with 打开文件

在没用到with时,打开文件(不考虑文件大小)代码如下:

try:

    f = open(file, 'r')

    f.read()

finnaly:

    f.close()

使用with代码:

with open(file, 'r') as f:

    f.read() 

如上代码可见,使用with时代码中不用关闭文件了,那文件关闭是怎么完成的呢?其实是__exit__()来完成的。

2、with 上下文管理器

with 后面必须是上下文管理器,上下文管理器我理解就是有__enter__()方法和__exit__()方法的类的实例化对象。

with 上下文管理器 as variable/tuple:

        执行语句

执行顺序如下:

1、with后面代码执行,生成上下文管理器;

2、将__enter__()方法的返回值赋值给as后的变量或者元组(注意:不能是逗号隔开的多个变量);

3、不管执行语句代码是否有异常,都会执行__exit__()方法,例如释放资源等。如果出现异常,则 sys.exc_info()的type、value、traceback会当做参数传给__exit__(),然后程序结束;如果没有异常,则返回None给__exit__()。重点:如果出现异常,但__exit__()返回类似True,那么异常不会被抛出的。

3、常见用法

1、打开文件

2、数据库连接操作,将数据库出现异常的情况放在__exit__()中处理

3、控制线程锁的获取和释放

4、欢迎大家补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

py_op_dev

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值