在语句中使用python变量

时间:2017-06-08 13:54:13

标签: python with-statement

在Python脚本中,我遇到了一个在with语句中定义的变量,但是在语句之​​外使用了该变量,如下例中的file

with open(fname, 'r') as file:
    pass
print(file.mode)

直觉上我会说file不应该出现在with声明之外,而这只会偶然发生。我在Python文档中找不到关于这是否应该起作用的结论性陈述。这种类型的语句是否可以安全使用(也适用于未来的python版本),还是应该避免使用?在Python文档中指向此信息的指针也非常有用。

1 个答案:

答案 0 :(得分:4)

变量范围仅适用于functionmoduleclass级别。如果您在相同的函数/模块/类中,则定义的所有变量都将在该函数/模块/类中可用,无论它是否在withfor,{{1}中定义阻止。

例如,这个:

if

与使用for x in range(1): y = 1 print(y) 语句的示例一样有效(尽管毫无意义)。

但是,您必须小心,因为如果永远不会输入块,则实际上可能无法定义代码块中定义的变量,如下例所示:

with

Good description of LEGB rule of thumb for variable scope