这个语法是用来代替传统的try...finally语法的。
代码如下:
with
EXPRESSION
[
as
VARIABLE]
WITH-BLOCK
基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。
紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法。
代码如下:
file
=
open("/tmp/foo.txt")
try:
data
=
file.read()
finally:
file.close()
使用with...as...的方式替换,修改后的代码是:
代码如下:
with
open("/tmp/foo.txt")
as
file:
data
=
file.read()
#!/usr/bin/env
python
#
with_example01.py
class
Sample:
def
__enter__(self):
"In
__enter__()"
return
"Foo"
def
__exit__(self,
type,
value,
trace):
"In
__exit__()"
def
get_sample():
return
Sample()
with
get_sample()
as
sample:
"sample:",
sample
执行结果为
代码如下:
In
__enter__()
sample:
Foo
In
__exit__()
1.
__enter__()方法被执行
2.
__enter__()方法返回的值
-
这个例子中是"Foo",赋值给变量'sample'
3.
执行代码块,打印变量"sample"的值为
"Foo"
4.
__exit__()方法被调用with真正强大之处是它可以处理异常。可能你已经注意到Sample类的__exit__方法有三个参数-
val,
type
和
trace。这些参数在异常处理中相当有用。我们来改一下代码,看看具体如何工作的。
没有do。
python保留字:and、as、assert、break、class、continue、def、del、elif、if、else、exec、for、finally、from、globa、import、in、is、print、try等等。
保留字说明
and 用于表达式运算,逻辑与操作。
as用于类型转换。
assert断言,用于判断变量或条件表达式的值是否为真。
break中断循环语句的执行。
class用于定义类。
continue继续执行下一次循环。
def用于定义函数或方法。
del删除变量或者序列的值。
elif条件语句 与if else 结合使用。
else条件语句 条件语句,与if,elif结合使用。也可以用于异常和循环使用。
exceptexcept 包括捕获异常后的操作代码,与try,finally结合使用。
exec用于执行python语句。
for循环语句。
finally用于异常语句,出现异常后,始终要执行finally包含的代码块。与try,except结合使用。
from用于导入模块,与import结合使用。
global定义全局变量。
if条件语句,与else,elif结合使用。
import用于导入模块,与from 结合使用。
in判断变量是否存在序列中。
is判断变量是否为某个类的实例。
lambda定义匿名函数。
from...importfrom A import b,相当于
import A
b = A.b
此过程中有一个隐含的赋值的过程
import...as
import A as B
给予A库一个B的别称,目的是为了好记。。可以按照自己的意愿给模块起别名