【问题标题】:python - Variable scope after using a 'with' statement [duplicate]python - 使用'with'语句后的变量范围[重复]
【发布时间】:2018-10-25 14:54:38
【问题描述】:

我在 stackoverflow 上没有找到这个问题的答案,所以我认为问这个问题可能会有所帮助,并把它放在这里 -

我在打开文件后声明一个新字典,方式如下 -

with open('some_file.txt','r') as f:
    dict = json.loads(f.read()) #converts text to a dictionary

我的问题是 - 即使在 'with' 范围结束后,我能否访问 dict 内容。

谢谢

【问题讨论】:

  • 何不试试看呢?
  • 1) 认为将其放在此处对其他人会有所帮助 2) 还寻找它为什么是这样的(即为什么它与“if”语句中的变量范围不同,例如)

标签: python file scope


【解决方案1】:

是的,在 Python 中,变量的 scope 仅在其定义的代码块结束时才结束,并且 with 语句不是 documentation 的代码块:

以下是块:模块、函数体和类 定义。每个交互输入的命令都是一个块。一个脚本文件 (作为标准输入提供给解释器或指定为 解释器的命令行参数)是一个代码块。一个脚本 命令(在解释器命令行上指定的命令 ‘-c’ 选项)是一个代码块。传递给 内置函数 eval() 和 exec() 是一个代码块。

【讨论】:

    【解决方案2】:

    在 python 范围内是由函数定义的。没有缩进范围(类似于其他语言中的“括号”范围)。 with 部分仅影响 f 对象。

    【讨论】:

    • with 语句仅分配f,必要时将名称引入当前包含范围。 with 语句完成后,该名称仍保留在范围内。
    • @chepner:是的,但是退出上下文管理器影响分配给f的对象。我没有说它消失了
    【解决方案3】:

    是的,您将无法访问f,其他一切都是公平的游戏。

    【讨论】:

    • f 仍在范围内。底层文件已关闭,但一般而言,with 语句中 as 关键字绑定的任何对象在 with 之后仍然可用,直到封闭块结束。
    猜你喜欢
    • 1970-01-01
    • 2020-11-09
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 2012-08-29
    • 1970-01-01
    相关资源
    最近更新 更多