dan*_*dhi 11 python scope with-statement
我只firstline使用python 阅读:
with open(file_path, 'r') as f:
my_count = f.readline()
print(my_count)
Run Code Online (Sandbox Code Playgroud)
我对变量my_count的范围感到困惑.虽然打印工作正常,但是my_count = 0首先使用语句做外部更好(例如在C中用于执行int my_count = 0)
Wil*_*sem 21
一个with语句也不能创建一个范围(比如if,for和while不要么创建一个范围).
因此,Python将分析代码并看到您在with语句中进行了赋值,因此这将使变量成为本地(到实际范围).
在Python中,变量不需要在所有代码路径中进行初始化:作为程序员,您有责任确保在使用变量之前分配变量.这可以导致更短的代码:例如,您确定列表包含至少一个元素,然后您可以循环分配.在Java中,循环中的赋值不被认为是安全的(因为循环体可能永远不会被执行).forfor
在语句之后我们可以安全地假设变量存在的意义上,范围之前的初始化with可以更安全with.另一方面,如果变量应该在with语句中赋值,而不是在with语句实际导致额外检查之前初始化它:如果在with语句中以某种方式跳过赋值,Python将会出错.
with语句仅用于上下文管理目的.它强制(通过语法)with在缩进结束时关闭您打开的上下文.
小智 6
您还应该阅读 PEP-343 和Python 文档。很明显,它不是关于创建范围,而是关于使用Context Manager。我在上下文管理器上引用 python 文档
上下文管理器是一个对象,它定义了在执行 with 语句时要建立的运行时上下文。上下文管理器处理进入和退出所需的运行时上下文以执行代码块。上下文管理器通常使用 with 语句调用(在 with 语句部分中描述),但也可以通过直接调用它们的方法来使用。
上下文管理器的典型用途包括保存和恢复各种全局状态、锁定和解锁资源、关闭打开的文件等。