零基础学习python_with(34课)

  今天学习的with语句,with的表达形式如下:据说context必须是上下文管理器,这我就懵比了,啥玩意啊。。。 

with语句的表达形式:

with context as var:

   block

context 可以是任意表达式; as VAR 是可选的。其一般的执行过程是这样的:

1、计算 context ,并获取一个上下文管理器。

2、上下文管理器的 __exit()__ 方法被保存起来用于之后的调用。

3、调用上下文管理器的 __enter()__ 方法。

4、如果 with 表达式包含 as VAR ,那么 context 的返回值被赋值给 VAR 。

5、执行 BLOCK 中的表达式。

6、调用上下文管理器的 __exit()__ 方法。如果 BLOCK 的执行过程中发生了一个异常导致程序退出,那么异常的 type 、 value 和 traceback (即 sys.exc_info()的返回值 )将作为参数传递给 __exit()__ 方法。否则,将传递三个 None 。

刚开始看上面的我也不是很懂,后面查看了下资料发现with的用法跟“上下文管理”是一起的,然后会调用 __enter()__ 和__exit()__ 方法,简单的来讲呢,举个下面的例子吧,反正要用专业术语说呢我也不知道,请看大众化的一个实例:
  这个是我们之前读写文件的用到的try...except..finally表达形式
try:
    filename = 'test.txt'
    f = open(filename,'w') 
    f.write('Hello world ') 
finally: f.close()

   但是这个也有可能最终finally执行出错导致没有执行到文件关闭,而且代码也不够简洁,所以就出来了个with...as的表达,如下:

with open('test.txt') as f:
    f.write('Hello world')

就这么简单就表达完了,with的表达里面会自动在异常抛出前将文件关闭。

如果要打开多个项目的话只需要逗号隔开即可,如下面表达:

with A() as a, B() as b:
        print()

with暂时讲解这么多,当然还有更深层次的内容以后用到的话再学吧,嘻嘻!

 
原文地址:https://www.cnblogs.com/leixiaobai/p/7786757.html