我只使用Python读取第一行:
with open(file_path, 'r') as f:
my_count = f.readline()
print(my_count)
我对
my_count
变量的范围有点困惑。虽然 print 语句工作得很好,但是首先在 my_count = 0
语句之外做类似 with
的事情不是更好吗(例如,在 C 中我会做 int my_count = 0
)?
with
语句不会创建作用域(如if
、for
和while
也不创建作用域)。
因此,Python 将分析代码并发现您在
with
语句中进行了赋值,从而使变量成为本地变量(到真实作用域)。
在Python中,变量不需要在所有代码路径中进行初始化:作为程序员,您有责任确保在使用变量之前对其进行赋值。这可能会导致代码更短:假设您确定列表至少包含一个元素,那么您可以在
for
循环中进行分配。在 Java 中,for
循环中的赋值不被认为是安全的(因为循环体可能永远不会被执行)。
在 with
范围之前初始化可以更安全,因为在
with
语句之后我们可以安全地假设变量存在。另一方面,如果变量 should在
with
语句中赋值,则在 with
语句之前不初始化它实际上会导致额外的检查:如果不知何故在 with
语句中跳过了赋值,Python 将出错.with 语句仅用于上下文管理目的。它强制(通过语法)您在
with
中打开的上下文在缩进末尾关闭。
。很明显,这不是关于创建范围,而是关于使用Context Manager。我引用了有关上下文管理器的 python 文档
上下文管理器是一个定义执行 with 语句时要建立的运行时上下文的对象。上下文管理器处理执行代码块所需的运行时上下文的进入和退出。上下文管理器通常使用 with 语句调用(在 with 语句部分中描述),但也可以通过直接调用其方法来使用。上下文管理器的典型用途包括保存和恢复各种全局状态、锁定和解锁资源、关闭打开的文件等。