Context Manager可以在Python中多次运行包含的块吗?

问题描述 投票:1回答:1

作为一个基本的例子,想象如下:

with runFiveTimes:
    print("test")

这在Python中可行吗?

(这个例子只是为了澄清这个问题,显然有更简单的方法来实现这个具体的例子)

python contextmanager
1个回答
3
投票

这是不可能的。我尝试将多个yield语句添加到上下文管理器中,而Python则适合。 This answer解决了更多问题,并解释了一些不错的选择。

This guy检查了产生的字节码,发现这是不可能的。 (This guide解释了每个字节码的含义。)

并且this guy显示上下文管理器存储在堆上,这是类所在的位置,而不是对象。

© www.soinside.com 2019 - 2024. All rights reserved.