如何用python 中with 用法
发布网友
发布时间:2022-04-22 05:48
我来回答
共3个回答
懂视网
时间:2022-05-10 11:39
这篇文章主要介绍了Python中with及contextlib的用法,结合实例形式较为详细的分析了with及contextlib的功能、使用方法与相关注意事项,需要的朋友可以参考下
本文实例讲述了Python中with及contextlib的用法。分享给大家供大家参考,具体如下:
平常Coding过程中,经常使用到的with场景是(打开文件进行文件处理,然后隐式地执行了文件句柄的关闭,同样适合socket之类的,这些类都提供了对with的支持):
with file('test.py','r') as f :
print f.readline()
with的作用,类似try...finally...,提供一种上下文机制,要应用with语句的类,其内部必须提供两个内置函数__enter__以及__exit__。前者在主体代码执行前执行,后则在主体代码执行后执行。as后面的变量,是在__enter__函数中返回的。通过下面这个代码片段以及注释说明,可以清晰明白__enter__与__exit__的用法:
#!encoding:utf-8
class echo :
def output(self) :
print 'hello world'
def __enter__(self):
print 'enter'
return self #返回自身实例,当然也可以返回任何希望返回的东西
def __exit__(self, exception_type, exception_value, exception_traceback):
#若发生异常,会在这里捕捉到,可以进行异常处理
print 'exit'
#如果改__exit__可以处理改异常则通过返回True告知该异常不必传播,否则返回False
if exception_type == ValueError :
return True
else:
return False
with echo() as e:
e.output()
print 'do something inside'
print '-----------'
with echo() as e:
raise ValueError('value error')
print '-----------'
with echo() as e:
raise Exception('can not detect')
运行结果:
contextlib是为了加强with语句,提供上下文机制的模块,它是通过Generator实现的。通过定义类以及写__enter__和__exit__来进行上下文管理虽然不难,但是很繁琐。contextlib中的contextmanager作为装饰器来提供一种针对函数级别的上下文管理机制。常用框架如下:
from contextlib import contextmanager
@contextmanager
def make_context() :
print 'enter'
try :
yield {}
except RuntimeError, err :
print 'error' , err
finally :
print 'exit'
with make_context() as value :
print value
contextlib还有连个重要的东西,一个是nested,一个是closing,前者用于创建嵌套的上下文,后则用于帮你执行定义好的close函数。但是nested已经过时了,因为with已经可以通过多个上下文的直接嵌套了。下面是一个例子:
from contextlib import contextmanager
from contextlib import nested
from contextlib import closing
@contextmanager
def make_context(name) :
print 'enter', name
yield name
print 'exit', name
with nested(make_context('A'), make_context('B')) as (a, b) :
print a
print b
with make_context('A') as a, make_context('B') as b :
print a
print b
class Door(object) :
def open(self) :
print 'Door is opened'
def close(self) :
print 'Door is closed'
with closing(Door()) as door :
door.open()
运行结果:
总结:python有很多强大的特性,由于我们平常总习惯于之前C++或java的一些编程习惯,时常忽略这些好的机制。因此,要学会使用这些python特性,让我们写的python程序更像是python。
热心网友
时间:2022-05-10 08:47
要使用 with 语句,首先要明白上下文管理器这一概念。有了上下文管理器,with 语句才能工作。
下面是一组与上下文管理器和with 语句有关的概念。
上下文管理协议(Context Management Protocol):包含方法 __enter__() 和 __exit__(),支持
该协议的对象要实现这两个方法。
上下文管理器(Context Manager):支持上下文管理协议的对象,这种对象实现了
__enter__() 和 __exit__() 方法。上下文管理器定义执行 with 语句时要建立的运行时上下文,
负责执行 with 语句块上下文中的进入与退出操作。通常使用 with 语句调用上下文管理器,
也可以通过直接调用其方法来使用。
运行时上下文(runtime context):由上下文管理器创建,通过上下文管理器的 __enter__() 和
__exit__() 方法实现,__enter__() 方法在语句体执行之前进入运行时上下文,__exit__() 在
语句体执行完后从运行时上下文退出。with 语句支持运行时上下文这一概念。
上下文表达式(Context Expression):with 语句中跟在关键字 with 之后的表达式,该表达式
要返回一个上下文管理器对象。
热心网友
时间:2022-05-10 10:05
在Python中,如果一个对象有__enter__和__exit__方法,就可以在with语句中使用它。
with块结束时会调用相应的__exit__中的代码.因此,我们不需要再写相应的代码去close,无论是因为什么原因结束with.
with open(...) as f:
print(f.readall())
等价于:
f = open(...)
print(f.readal())
f.close()
同时,我们还可以在一个with 语句中包括多个对象:
with open(...) as f1, open(...) as f2:
...
如果不使用with,考虑到f2可能会打开失败或者后续的操作会出错,我们可以需要这样去写:
f1 = open(...)
try:
f2 = open(...)
...
catch:
pass
else:
f2.close()
f1.close()
如何用python中with用法
1. 基本用法:在Python中,`with`语句是一种上下文管理协议的实现。它可以用于确保某些代码块执行完毕后,相关资源被正确释放。最常见的应用场景是文件操作。当使用`with`语句打开文件时,文件会在代码块执行完毕后自动关闭,无需手动调用关闭方法。2. 上下文管理器的使用:上下文管理器是一个拥有`__enter...
如何用python 中with 用法
在Python编程中,一个对象若具备特有的__enter__和__exit__方法,就能在with语句的庇护下进行操作,为程序员带来便利。with语句的核心在于其内部的代码块在执行完毕后,会自动调用相应的__exit__方法,无需额外关注资源的关闭,无论因何种原因导致的退出。比如,原代码:python with open(...) as f...
如何用python 中with 用法
__enter__() 和 __exit__() 方法。上下文管理器定义执行 with 语句时要建立的运行时上下文,负责执行 with 语句块上下文中的进入与退出操作。通常使用 with 语句调用上下文管理器,也可以通过直接调用其方法来使用。运行时上下文(runtime context):由上下文管理器创建,通过上下文管理器的 __enter__...
Python中的with...as用法介绍方法
这个语法是用来代替传统的try...finally语法的。代码如下:with EXPRESSION [ as VARIABLE] WITH-BLOCK基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法。紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。当with后...
你在Python 中常常写的 with..as.. 到底是个啥?
接下来,我们来学习一下 Python 的正确使用方法。with 语句用于管理上下文对象,通过它可以操作上下文对象。例如,在上述例子中,Handsomeb 对象在 with 调用后需要使用 __enter__() 和 __exit__() 这两个方法。因此,如果你想让创建的对象能够被 with 语句使用,那么这个对象必须实现这两个方法。这...
揭秘Python 中的 with 关键字
上下文管理器 ,引用自 Python 官方文档, 是一种让您在需要时准确分配和释放资源的方法 ,或者简单来说: 当您在某些资源上做某事时缩短您的代码片段 ,这意味着您可以自己定义 with 语句的用法!我们如何做到这一点?嗯,很简单,你只需要实现两个 魔术函数 :一个叫做 __enter__ ,另...
with语句通过什么技术管理python中的资源
在使用with语句时,Python会先执行上下文管理器的`__enter__`方法,然后进入with语句块执行用户的代码。无论with语句块中的代码是否正常执行完毕或者抛出异常,最后都会执行上下文管理器的`__exit__`方法来进行清理工作。这种方式使得资源管理代码更加整洁和易于维护。举个例子,文件操作是资源管理的常见场景...
with语句通过什么技术管理python中的资源
在Python中,with语句通过上下文管理协议(Context Management Protocol)来管理技术资源,如文件、线程锁、数据库连接等。上下文管理协议包括两个方法:__enter__()和__exit__(exc_type, exc_val, exc_tb)。当with语句开始执行时,它首先会调用被管理对象的__enter__()方法,该方法通常用于设置资源、...
python中with语句的作用
with语句相当于你定义一个类的时候定义了__enter__()和__exit__()这个两个方法。在我们进行文件操作的的时候会用到open方法,后面有了with open以后就不再只使用open方法了,为什么?因为with open方法简单,我们不用再去管关闭文件了,即使中间发生异常,with open也会帮我们把文件关闭掉,以下示例...
pythonwith...as
详细解释:Python中的`with`语句是一个用于管理资源的重要工具,它能够自动处理资源的打开和关闭操作。在这种语句结构中,“with”后面跟随的是要管理的资源的代码块,而“as”关键字用于指定资源的引用名称。通过这个结构,我们可以更清晰地控制资源的生命周期。在资源管理的场景下,我们经常会遇到需要打开...