python - "with"语句中的变量范围?

标签 python scope with-statement

我只从 python 读取 firSTLine 使用:

with open(file_path, 'r') as f:
    my_count = f.readline()
print(my_count)

我对变量 my_count 的范围有点困惑。虽然打印工作正常,但最好先在声明之外做类似 my_count = 0 的事情(例如在 C 中用于执行 int my_count = 0)

最佳答案

with 语句不会创建作用域(如ifforwhile 也不要创建作用域)。

因此,Python 将分析代码并发现您在 with 语句中进行了赋值,因此这将使变量成为本地变量(对于实际范围)。

在 Python 中,所有代码路径中的变量都不需要初始化:作为程序员,您有责任确保在使用变量之前对其进行赋值。这会导致代码更短:例如,您确定一个列表至少包含一个元素,然后您可以在 for 循环中赋值。在 Java 中,for 循环中的赋值被认为是不安全的(因为循环体可能永远不会执行)。

with 作用域之前初始化可以更安全,因为在 with 语句之后我们可以安全地假设变量存在。另一方面,如果变量应该with语句中赋值,那么在with语句之前不初始化它实际上会导致额外的检查:如果在 with 语句中以某种方式跳过赋值,Python 将出错。

with 语句仅用于上下文管理目的。它强制(通过语法)您在 with 中打开的上下文在缩进结束时关闭。

关于python - "with"语句中的变量范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45100271/

相关文章:

python - key 错误 : 8 - Odoo v8

python - 使用队列的 Asyncio 持久客户端协议(protocol)类

powershell - 设置位置范围

python - 如何从 ExitStack 中删除上下文管理器

python - random.shuffle() 的倒数?

python - 如何通过 subprocess.Popen 接收 pickle

scope - 在 LilyPond 中定义函数 inside\score

python - 为什么会发生这个 UnboundLocalError(关闭)?

R:with()函数内的 Debug模式

python - 在 Python 中使用生成器/"with ... as"的紧凑方式