Python with语句
Posted 黄树超
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python with语句相关的知识,希望对你有一定的参考价值。
背景
在tf的教程中看到有关的代码:
会话在完成后必须关闭以释放资源。你也可以使用"with"句块开始一个会话,该会 话将在"with"句块结束时自动关闭
with tf.Session() as sess: result = sess.run([product]) print(result)
概览:
python中的with语句用于访问资源。它确保执行指定的__exit__(“清理”)操作,而不管释放被访问资源的处理过程中的错误或异常。
例如读取和写入文件后自动关闭、线程中锁的自动获取和释放等。
python中与语句相关的概念包括:上下文管理协议、上下文管理器、运行时上下文、上下文表达式和处理资源的代码段。
with的作用:
使用with后不管with中的代码出现什么错误,都会进行对当前对象进行清理工作。
例如file的file.close()方法,无论with中出现任何错误,都会执行file.close()方法
with语句类似try
、except
、finally
的功能。
但是with语句更简洁。而且更安全。代码量更少。
with只有在支持了上下文管理器的对象的情况下下才能使用。这些对象有:
file
decimal.Context
thread.LockType
threading.Lock
threading.RLock
threading.Condition
threading.Semaphore
threading.BoundedSemaphore
那么什么是上下文管理器:
这个管理器就是在对象内实现了两个方法:__enter__() 和__exit__()
__enter__()方法会在with的代码块执行之前执行,__exit__()会在代码块执行结束后执行。
__exit__()方法内会自带当前对象的清理方法。
上下文管理器可以自定义。也可以重写__enter__()和__exit__()方法。
with 用法:
格式:
with context_expression [as target(s)]:
with-body
with后面 + 一个表达式,表达式返回的是一个上下文管理器对象,我的理解就是表达式的返回结果。使用as 可以将这个结果赋值给某个变量。方便之后操作。
例子:
with open(r'somefileName') as somefile:
for line in somefile:
print line
# ...more code
一个高级例子:
# nested 函数:
with nested(A(), B(), C()) as (X, Y, Z):
# with-body code here
直接with后面的表达式就是个方法。并且把连着三个函数的方法直接赋值给不同变量。
等同于:
with A() as X:
with B() as Y:
with C() as Z:
# with-body code here
以上是关于Python with语句的主要内容,如果未能解决你的问题,请参考以下文章