首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用with -语句定义的变量在with-block之外可用吗?

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

Stack Overflow用户
提问于 2011-06-22 05:42:49
回答 2查看 26.3K关注 0票数 96

考虑以下示例:

代码语言:javascript
复制
with open('a.txt') as f:
    pass
# Is f supposed to be defined here?

我已经阅读了with-statement的语言文档(2.7)以及PEP-343,但据我所知,他们没有关于这个问题的任何内容。

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

EN

回答 2

Stack Overflow用户

发布于 2011-06-22 05:50:25

with语法:

代码语言:javascript
复制
with foo as bar:
    baz()

糖大约是用来:

代码语言:javascript
复制
try:
    bar = foo.__enter__()
    baz()
finally:
    if foo.__exit__(*sys.exc_info()) and sys.exc_info():
        raise

这通常很有用。例如

代码语言:javascript
复制
import threading
with threading.Lock() as myLock:
    frob()

with myLock:
    frob_some_more()

上下文管理器可以不止一次地被使用。

票数 28
EN

Stack Overflow用户

发布于 2011-06-22 07:22:59

回答Heikki在评论中的问题:是的,这个作用域行为是Python语言规范的一部分,可以在任何和所有兼容的python (包括PyPy、Jython和IronPython)上工作。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6432355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档