我正在使用以下代码从Python中仅读取firstline
:
with open(file_path, 'r') as f:
my_count = f.readline()
print(my_count)
我对变量my_count的作用域有些困惑。虽然打印工作得很好,但是是否最好先在with语句之外做一些像my_count = 0
这样的事情呢?(例如,在C中,我习惯于首先使用int my_count = 0
)
我正在使用以下代码从Python中仅读取firstline
:
with open(file_path, 'r') as f:
my_count = f.readline()
print(my_count)
我对变量my_count的作用域有些困惑。虽然打印工作得很好,但是是否最好先在with语句之外做一些像my_count = 0
这样的事情呢?(例如,在C中,我习惯于首先使用int my_count = 0
)
with
语句不会创建作用域(与if
,for
和while
一样不会创建作用域)。
因此,Python会分析代码并看到您在with
语句中进行了赋值,因此这将使变量成为局部变量(在实际作用域内)。
在Python中,变量不需要在所有代码路径中进行初始化:作为程序员,您负责确保在使用变量之前对其进行了赋值。这可以使代码更短:例如,假设您确定列表至少包含一个元素,则可以在for
循环中对其进行赋值。在Java中,在for
循环中进行赋值被认为是不安全的(因为可能永远不会执行循环体)。
在with
语句作用域之前进行初始化可能更加安全,因为在with
语句之后,我们可以安全地假定该变量存在。另一方面,如果变量应该在with
语句中进行赋值,则在with
语句之前不进行初始化实际上会导致进行额外的检查:如果在with
语句中跳过了赋值,Python会报错。
with
语句仅用于上下文管理目的。它通过语法强制要求您在缩进结束时关闭在with
中打开的上下文。
with
语句来说,情况又不同了。由于该语句体将被执行(直到出现异常或结束),因此有时最好尽可能缩短with
语句,例如当它打开一个文件时,我们希望尽快关闭该文件。 - Willem Van Onsem
logs_count
。你是不是想说my_count
? - DeepSpacemy_count
。 - Chris_Rands