2024-04-27 00:02:00 发布
网友
我是一位python新手,但我正在用python实现一个基准测试工具,例如,它将创建多组相互依赖的资源。当程序超出范围时,我希望以正确的顺序清理资源
我来自C++背景,C++中我知道我可以用RAII(构造函数,析构函数)来完成这个操作。p>
对于这个问题,模式中的等效模式是什么?有没有一种用python实现RAII的方法,或者有更好的方法来解决这个问题
您可能正在寻找一个context manager,它是一个可以在with语句中使用的对象:
with
with context() as c: do_something(c)
当输入with语句时,将对表达式(在本例中为context())求值,并应返回上下文管理器__enter__()将在上下文管理器上被调用,并且结果(可能与上下文管理器是同一对象,也可能不是同一对象)被分配给用as指定的变量。无论控件如何退出with主体,都将在上下文管理器上调用__exit__(),参数指定是否引发异常
context()
__enter__()
as
__exit__()
例如:内置open()应该以这种方式使用,以便在与打开的文件交互后关闭该文件
open()
可以使用contextlib轻松定义新的上下文管理器类型
对于更一次性的解决方案,您可以使用try/finally:finally块在try块之后执行,无论控件如何退出try块:
try
finally
try: do_something() finally: cleanup()
您可能正在寻找一个context manager,它是一个可以在
with
语句中使用的对象:当输入
with
语句时,将对表达式(在本例中为context()
)求值,并应返回上下文管理器__enter__()
将在上下文管理器上被调用,并且结果(可能与上下文管理器是同一对象,也可能不是同一对象)被分配给用as
指定的变量。无论控件如何退出with
主体,都将在上下文管理器上调用__exit__()
,参数指定是否引发异常例如:内置
open()
应该以这种方式使用,以便在与打开的文件交互后关闭该文件可以使用contextlib轻松定义新的上下文管理器类型
对于更一次性的解决方案,您可以使用
try
/finally
:finally
块在try
块之后执行,无论控件如何退出try
块:相关问题 更多 >
编程相关推荐