一、语法结构
with EXPRESSION [ as VARIABLE] WITH-BLOCK
二、简单描述
存在一些对象或方法,需要事先设置,事后做清理工作。比如文件处理,需要先获取一个文件句柄,从文件中读取数据,然后关闭句柄
java中可以通过try...catch...finally来控制
python中可以通过with...as来控制
三、参数解释
with后的EXPRESSION
是一个求值表达式,返回一个对象,该对象的_enter_()方法被调用
as后的VARIABLE
该对象的_enter_()的返回值将被赋值给“VARIABLE”
WITH-BLOCK
with代码块,代码块全部执行完后,将调用返回对象的_exit_()方法
with EXPRESSION [ as VARIABLE] WITH-BLOCK
二、简单描述
存在一些对象或方法,需要事先设置,事后做清理工作。比如文件处理,需要先获取一个文件句柄,从文件中读取数据,然后关闭句柄
java中可以通过try...catch...finally来控制
python中可以通过with...as来控制
三、参数解释
with后的EXPRESSION
是一个求值表达式,返回一个对象,该对象的_enter_()方法被调用
as后的VARIABLE
该对象的_enter_()的返回值将被赋值给“VARIABLE”
WITH-BLOCK
with代码块,代码块全部执行完后,将调用返回对象的_exit_()方法
四、举例
with open("d:/foo.txt") as file:
data = file.read()
print data
open执行完后,返回一个file对象,并执行file对象的__enter__()方法
file对象接口,实现了__enter__和__exit__方法
def __enter__(self): # real signature unknown; restored from __doc__
""" __enter__() -> self. """
return self
def __exit__(self, *excinfo): # real signature unknown; restored from __doc__
""" __exit__(*excinfo) -> None. Closes the file. """
pass
当with后的代码块执行完后,调用file对象的__exit__()方法,该方法会closes the file