(上下文管理器)是Python2.5开始支持的一种语法,用于规定 ,一旦进入或者离开该使用范围,会有特殊操作被调用(比如为对象分配或者释放内存)。它的语法形式是
.
<前>
, (f.closed),,,,,,,
f.write ( (f.closed)
<前>
, (f.closed) ,,f.write ( )
(f.closed)
)。上下文管理器有 。当隶属的程序块执行结束的时候(也就是不再缩进),上下文管理器自动关闭了文件(我们通过 来查询文件是否关闭)。我们相当于使用 规定了文件对f的象 .
特殊方法(还记得我们如何利用特殊方法来实现各种语法?参看 特殊方法与多范式)。当我们使用上下文管理器的语法时,我们实际上要求Python在进入程序块之前调用对象的 方法,在结束程序块的时候调用 方法。对于文件对象f来说,它定义了__enter__()和__exit__()方法(可以通过 看的到)。在f的__exit__()方法中,有 ,所以在使用上下文管理器时,我们就不用明文关闭f文件了。
定义了__enter__()和__exit__()方法的对象都可以用于上下文管理器。文件对象f是内置对象,所以f自动带有这两个特殊方法,不需要自定义。
#, customized objectclass 誓言(对象):,,,,def __init__(自我,文本): ,,,,,,,self.text =, text ,,, def __enter__(自我): ,,,,,,,self.text =,“小姐:说:,“,+,self.text ,,, #, add 前缀 ,,,,,,,return self ,,,,,,,,,,,,,,,,,,,,,,,,, #,注意:return an 对象 ,,,def __exit__(自我、exc_type exc_value回溯): ,,,,,,,self.text =, self.text +,“!“,,,,,,,,,, #, add suffixwith 誓言(“我# 39;m fine"), as myvow:,,,,打印(myvow.text)打印(myvow.text)
<>以前小姐:说:,我# 39;m 好 小姐:说:,我# 39;m 好!
所指的变量,也就是myvow。在__enter__()中,我们为myvow。文本增加了前缀(“我说:“)。在__exit__()中,我们为myvow.text增加了后缀(“!“)。
(例外), 中 , , 用于描述异常。我们可以根据这三个参数进行相应的处理。如果正常运行结束,这三个参数都是 。在我们的程序中,我们并没有用到这一特性。
总结:
通过上下文管理器,我们控制对象在程序不同区间的特性。上下文管理器( )大致相当于如下流程:
#, with EXPR  as VAR: VAR =EXPR 时间=VAR VAR.__enter__()尝试: ,,,BLOCKfinally: ,,,VAR.__exit__ ()
由于上下文管理器带来的便利,它是一个值得使用的工具。
http://shenzhen.offcn.com/