栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

python中上下文管理器的目的是什么?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python中上下文管理器的目的是什么?

什么是上下文管理器?

上下文管理器在那里可以提供资源帮助(尽管可能会使用更多资源)。该 背景 是基本的资源。

假设您打开了一个文件进行写入:

f = open(path, "w")

您现在有了一个打开的文件句柄。在处理文件期间,没有其他程序可以写入该文件。为了让其他程序对其进行写入,必须关闭文件句柄:

f.close()

但是,在关闭文件之前发生了错误:

f = open(path, "w")data = 3/0  # Tried dividing by zero. Raised ZeroDivisionErrorf.write(data)f.close()

现在将发生的是该函数或整个程序将退出,同时使文件保持打开状态。(CPython会在终止时清除句柄,并且将句柄与程序一起释放,但您不应指望该句柄)

with语句可确保您在缩进后立即关闭文件句柄:

with open(path, "w") as f:    data = 3/0  # Tried dividing by zero. Raised ZeroDivisionError    f.write(data)# Here, the file is already closed automatically, no matter what happened.

with
语句可以用于更多的事情。例如:
threading.Lock()

lock = threading.Lock()with lock:  # Lock is acquired   do stuff...# Lock is automatically released.

使用上下文管理器完成的几乎所有操作都可以使用,

try: ... finally:...
但是上下文管理器更易于使用,更舒适,更具可读性,并且可以实现
__enter__
__exit__
提供易于使用的界面。


上下文管理器如何实施?

什么是

__enter__
__exit__

创建上下文管理器是通过在常规类中实现

__enter__()
并完成的
__exit__()

__enter__()
告诉上下文管理器启动时和
__exit__()
上下文管理器存在时的操作(
__exit__()
如果发生异常,则将异常提供给方法)


contextlib中
可以找到创建上下文管理器的快捷方式。它将生成器包装为上下文管理器,如下所示:

from contextlib import contextmanager@contextmanagerdef tag(name):    print("<%s>" % name)    yield    print("</%s>" % name)>>> with tag("h1"):...    print("foo")...<h1>foo</h1>

示例取自Python文档。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/641601.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号