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

时间:2018-02-20 05:31:50

标签: python contextmanager

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

with runFiveTimes:
    print("test")

这在Python中是否可行?

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

1 个答案:

答案 0 :(得分:3)

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

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

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