【发布时间】:2011-09-19 21:56:58
【问题描述】:
考虑以下示例:
with open('a.txt') as f:
pass
# Is f supposed to be defined here?
我已阅读有关 with-statement 和 PEP-343 的语言文档 (2.7),但据我所知,他们没有就此事发表任何意见。
在 CPython 2.6.5 中,f 似乎确实是在 with 块之外定义的,但我宁愿不依赖可能改变的实现细节。
【问题讨论】:
-
f 在封闭范围内是否可用的问题已经得到解答。对我来说,当我意识到 context 的概念与 scope 的概念不同时,上下文管理器的整个概念就被点击了。这是我网站的链接,希望对您有所帮助:markus-gattol.name/ws/python.html#context_manager
-
完全正确 - 上下文是改变当前状态的问题 - 文件打开、文件关闭或线程锁定/解锁。设备分配/解除分配。范围内命名的所有变量仍然存在 - 但它们现在将指向已释放/关闭/解锁的句柄。
标签: python