with语句定义的变量在with-block之外可用吗?


问题内容

考虑以下示例:

with open('a.txt') as f:
    pass
# Is f supposed to be defined here?

我已经阅读过用于声明的语言文档(2.7)和PEP-343,但据我所知,他们对此事一言不发。

在CPython 2.6.5f中,似乎确实是在with块之外定义的,但是我宁愿不要依赖于可能发生变化的实现细节。


问题答案:

是的,上下文管理器将在with语句之外可用,并且不依赖于实现或版本。with语句 不会 创建新的执行范围。