Python with…as… 语法深入解析

2019-11-12 20:17


with从Python 2.5就有,需求from __future__ import with_statement。自python 2.6开端,成为默许关键字。

也就是说with是一个操控流句子,跟if/for/while/try之类的是一类的,with能够用来简化try finally代码,看起来能够比try finally更明晰。

基本思想是with所求值的目标必须有一个__enter__()办法,一个__exit__()办法。

紧跟with后边的句子被求值后,回来目标的__enter__()办法被调用,这个办法的回来值将被赋值给as后边的变量。当with后边的代码块悉数被履行完之后,将调用前面回来目标的__exit__()办法。

with expresion as variable的履行进程是,首要履行__enter__函数,它的回来值会赋给as后边的variable,想让它回来什么就回来什么,只需你知道怎样处理就能够了,假如不写as variable,回来值会被疏忽。

然后,开端履行with-block中的句子,不管成功失败(比方发作反常、过错,设置sys.exit()),在with-block履行完成后,会履行__exit__函数。

这样的进程其实等价于:

再看个比如

运用with...as...的办法替换,修改后的代码是:

履行成果为

1. __enter__()办法被履行

2. __enter__()办法回来的值 - 这个比如中是"Foo",赋值给变量sample

3. 履行代码块,打印变量"sample"的值为 "Foo"

4. __exit__()办法被调用with真实强壮之处是它能够处理反常。或许你现已注意到Sample类的__exit__办法有三个参数- val, type 和 trace。这些参数在反常处理中适当有用。



服务支持

我们珍惜您每一次在线询盘,有问必答,用专业的态度,贴心的服务。

让您真正感受到我们的与众不同!