码迷,mamicode.com
首页 > 编程语言 > 详细

python with语句

时间:2019-09-26 23:42:27      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:适用于   指定   比较   int   文件   body   疑问   清理   执行   

参考链接:https://www.ibm.com/developerworks/cn/opensource/os-cn-pythonwith/

with语句用于异常处理,适用于存在资源访问的场合,无论在资源访问的过程中是否发生异常,都会执行必要的清理操作,释放资源,比如文件打开后自动关闭、线程中锁的自动获取和释放

要明白with语句是怎样使用的,有必要引入一些上下文管理器的相关概念

  上下文管理器、上下文管理协议、运行时上下文、上下文表达式、语句体

  上下文管理器和上下文管理协议是两个相互关联的定义:具体来说,上下文管理协议是指两个方法:__enter__()和__exit__(),支持该协议的对象必须实现这两个方法。而上下文管理器就是指支持上下文管理协议的对象。毫无疑问,这个对象实现了__enter__()、__exit__()两个方法。

  上下文管理器对象定义with语句运行时要建立的“运行时上下文”,负责with语句中上下文的进入和退出。通常使用with语句调用上下文管理器,也可以直接调用其方法来实现。

  运行时上下文:__enter__()会在语句体执行之前进入“运行时上下文”,__exit__()会在语句体执行完毕后从运行时上下文退出

  上下文表达式:跟在with后面的语句,是用来返回一个上下文管理器的

  语句体:with语句中包裹的部分

 

with语句的语法格式:

with context_expression [as target(s)]:
    with-body

  
  这里 context_expression 要返回一个上下文管理器对象,该对象并不赋值给 as 子句中的 target(s) ,如果指定了 as 子句的话,会将上下文管理器的 __enter__() 方法的返回值赋值给 target(s)。

  target(s) 可以是单个变量,或者由“()”括起来的元组(不能是仅仅由“,”分隔的变量列表,必须加“()”)。

·  Python 对一些内建对象进行改进,加入了对上下文管理器的支持,可以用于 with 语句中,比如可以自动关闭文件、线程锁的自动获取和释放等。假设要对一个文件进行操作,使用 with 语句可以有如下代码:

with open(r‘somefileName‘) as somefile:
    for line in somefile:
        print line
        # ...more code

  这里使用了 with 语句,不管在处理文件过程中是否发生异常,都能保证 with 语句执行完毕后已经关闭了打开的文件句柄。如果使用传统的 try/finally 范式,则要使用类似如下代码:

somefile = open(r‘somefileName‘)
try:
    for line in somefile:
        print line
        # ...more code
finally:
    somefile.close()

  比较起来,使用 with 语句可以减少编码量。已经加入对上下文管理协议支持的还有模块 threading、decimal 等。

python with语句

标签:适用于   指定   比较   int   文件   body   疑问   清理   执行   

原文地址:https://www.cnblogs.com/Gaoqiking/p/11594700.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!