gpt4 book ai didi

python - 在Python中调用上下文管理器

转载 作者:行者123 更新时间:2023-12-01 05:00:26 24 4
gpt4 key购买 nike

我正在尝试找到一种好方法来解释为什么通过调用另一个上下文管理器来创建专门的上下文管理器可以按预期工作。我不是在提示!,这真是太好了。但在测试之前我不确定它是否有效,因此我觉得我失去了一些东西。

为了澄清,请考虑以下示例:

>>> from contextlib import contextmanager
>>> @contextmanager
... def f(val):
... print(val)
... yield
... print(val+1)
...
>>>
>>> with f(1):
... print(3)
...
1
3
2

现在我们专注于它:

>>> def f42():
... return f(42)
...
>>> with f42():
... print(3)
...
42
3
43

我想让我困惑的是为什么 f 的产量会通过 f42 向上冒泡?为什么我不需要显式地编写 f42 作为上下文管理器。

最佳答案

使用 f(42) 之间没有区别with语句并在另一个函数中使用它然后返回它。所有这些with需要的是表达式生成一个上下文管理器。

您也可以这样做:

cm = f(42)
with cm:
print(3)

Python 所做的就是执行 with <expression> 中的表达式。语句,然后将该表达式的结果视为上下文管理器。表达式如何生成上下文管理器并不重要。

换句话说,f这里不是你的上下文管理器,只是调用 f()返回值 .

关于python - 在Python中调用上下文管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26342515/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com