with语句时用于对try except finally 的优化,让代码更加美观,
例如常用的开发文件的操作,用try except finally 实现:
f=open('file_name','r')
try:
r=f.read()
except:
pass
finally:
f.close()
打开文件的时候,为了能正常释放文件的句柄,都要加个try,然后再finally里把f close掉,但是这样的代码不美观,finally就像个尾巴,一直托在后面,尤其是当try里面的语句时几十行
用with的实现:
with open('file_name','r') as f:
r=f.read()
with只适用于上下文管理器的调用,除了文件外,with还支持 threading、decimal等模块,当然我们也可以自己定义可以给with调用的上下文管理器
在开发的过程中,会有很多对象在使用之后,是需要执行一条或多条语句来进行关闭,释放等操作的,例如上面说的的文件,还有数据库连接,锁的获取等,这些收尾的操作会让代码显得累赘,也会造成由于程序异常跳出后,没有执行到这些收尾操作,而导致一些系统的异常,还有就是很多程序员会忘记写上这些操作-_-!-_-!,为了避免这些错误的产生,with语句就被生产出来了。with语句的作用就是让程序员不用写这些收尾的代码,并且即使程序异常也会执行到这些代码(finally的作用)
个人理解:就是用优雅的方式,简洁地解决异常处理和资源释放。