我正在使用以下方式从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
)
答案 0 :(得分:16)
with
语句未创建范围(例如if
,for
和while
也不会创建范围。< / p>
因此,Python将分析代码并看到您在with
语句中进行了赋值,因此这将使变量成为本地变量(到实际范围)。
在Python变量中,所有代码路径中不需要初始化:作为程序员,您有责任确保在使用变量之前分配变量。这可以导致更短的代码:例如,您确定列表包含至少一个元素,然后您可以在for
循环中进行分配。在Java中,for
循环中的赋值不被认为是安全的(因为循环体可能永远不会被执行)。
with
范围之前的初始化在with
语句之后我们可以安全地假设变量存在的意义上可以更安全。另一方面,如果 应该在with
语句中分配变量,则在with
语句实际导致额外检查之前不对其进行初始化:如果不知何故,Python将会出错在with
声明中跳过了作业。
with语句仅用于上下文管理目的。它强制(通过语法)在缩进结束时关闭with
中打开的上下文。
答案 1 :(得分:2)
您还应该通过PEP-343和Python Documentation。它将清楚地表明它不是关于使用Context Manager创建范围。我在上下文管理器上引用了python文档
上下文管理器是一个对象,它定义在执行with语句时要建立的运行时上下文。上下文管理器处理进入和退出所需运行时上下文以执行代码块。通常使用with语句调用上下文管理器(在with语句一节中描述),但也可以通过直接调用它们的方法来使用。
上下文管理器的典型用法包括保存和恢复各种全局状态,锁定和解锁资源,关闭打开的文件等。