在Python脚本中,我遇到了一个在with
语句中定义的变量,但是在语句之外使用了该变量,如下例中的file
:
with open(fname, 'r') as file:
pass
print(file.mode)
直觉上我会说file
不应该出现在with
声明之外,而这只会偶然发生。我在Python文档中找不到关于这是否应该起作用的结论性陈述。这种类型的语句是否可以安全使用(也适用于未来的python版本),还是应该避免使用?在Python文档中指向此信息的指针也非常有用。
答案 0 :(得分:4)
变量范围仅适用于function
,module
和class
级别。如果您在相同的函数/模块/类中,则定义的所有变量都将在该函数/模块/类中可用,无论它是否在with
,for
,{{1}中定义阻止。
例如,这个:
if
与使用for x in range(1):
y = 1
print(y)
语句的示例一样有效(尽管毫无意义)。
但是,您必须小心,因为如果永远不会输入块,则实际上可能无法定义代码块中定义的变量,如下例所示:
with