python中上下文管理,with的用法

 

  • 实例化Foo,得到对象a,执行__init__方法,打印第一句;如下:

python中上下文管理,with的用法

 

在定义Foo时,定义了__enter__和__exit__方法,那么我们实例化的对象obj就是一个上下文管理器,

含有__enter__和__exit__方法的对象就是上下文管理器。

所以在这里可以用with

with 上下文管理器:  

  语句体

 

当with遇到上下文管理器时,执行顺序:先执行上下文管理器的__enter__方法 -> 再执行语句体  -> 最后执行__exit__方法.

举例如下:

python中上下文管理,with的用法

 

  • with调用上下文管理器的 __enter__ 方法时;如果使用了 as 子句,则将 __enter__() 方法的返回值赋值给 as 子句中的目标对象,即下面as后面的obj;

obj可以是单个变量或()括起来的元组; __enter__ 方法无返回左下图,有返回右下图,举例如下: 

python中上下文管理,with的用法《《《--》》》python中上下文管理,with的用法

 

  •  下面是我用with 加 上下文管理器连接数据库的例子如下:

python中上下文管理,with的用法

 

 

 

常见的上下文管理的用法:

with open("/tmp/foo.txt") as file:

  data = file.read() 

如果使用传统的 try/finally 范式,则要使用类似如下代码:

somefile = open(r'somefileName')

try:

   for line in somefile:

    print line

finally:

   somefile.close()

 

  • 结论

使用 with 语句可以减少编码量;不管在处理对象过程中是否发生异常,都能保证 with 语句执行完毕后,关闭了打开对象

 

 

 

 

 

 

 

上一篇:Python一键替换证件照背景,还用去照相馆?


下一篇:[学习笔记] min_25 筛