问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501
你好,欢迎来到懂视!登录注册
当前位置: 首页 - 正文

如何用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”关键字用于指定资源的引用名称。通过这个结构,我们可以更清晰地控制资源的生命周期。在资源管理的场景下,我们经常会遇到需要打开...

声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
红米10x5g多少钱京东 红米10x5g多少钱丶 卖汽油需要办理什么许可证 成品油的汽油、柴油经营许可证如何办理? 母亲经常头痛,怎么办? 梦见男友脚踏两船后来还甩了我 建行什么基金可以快速赎回 建行买什么基金划算 建行什么是基金理财 建行什么理财基金好 德国爱他美白金pre和白金一段的区别 德国爱他美奶粉pre段冲好了有颗粒物,正常吗 德国爱他美奶粉pre段奶粉什么颜色 德国爱他美pre安心罐和罐装配方区别 德国爱他美pre挂壁现象是为什么 德国婴儿奶粉爱他美pre段适合多大婴儿喝 德国爱他美pre和一段能混合吗 德国爱他美Pre段奶粉怎么冲 在初中语文课堂如何渗透核心素养 怎样全面而又扼要地把握中学语文教学的目的和任务 如何优化初中语文课堂教学 中学语文教学应如何渗透情感核心素养教育 初中语文教学理念 中学语文课堂教学模式 中学语文教学法 初中语文教学如何把握德育教育原则 oppo k9手机的照相摄像头颜色不正怎么调 初中语文常用的八种教学方法 如何进行初中语文教学? 我的opporeno手机拍照色差很大,该怎样设置相机色... Python新手,怎么使用with语句?对于with语句及其... python中with语句的作用 python中with是什么意思 Python中的with...as用法介绍 python with函数怎么用 python with语句有什么用 python中with python中with as 是什么意思刚入门求... python中with python中with as 是什么意思刚入门求... python with...as python with...as python with.as能举例讲解以下with.有什么用法吗 python with.as能举例讲解以下with.有什么用法吗 python的with语句怎样嵌套使用 python endswith方法 python针对关键字with/as怎样使用 python with语句单元测试怎么写 为什么python这个with后面只运行了4、5行?后面的... python里的with open(file name) as file obj是什... 软件测试中,python 中 open与with open 的区别? python3 with open()用法
  • 焦点

最新推荐

猜你喜欢

热门推荐