如何理解Python中的全局和局部作用域?

25 浏览
0 Comments

如何理解Python中的全局和局部作用域?

我是Python的初学者,对下面的情况感到困惑。

x = 1
def func():
    print(x)
    x = 2
    return x

所以我得到了UnboundLocalError: local variable 'x' referenced before assignment(局部变量'x'在赋值之前被引用)的错误。

但如果我理解得正确的话 - Python会逐行读取和执行代码。

所以在函数内的第一条语句"print(x)"中,它应该只是引用全局变量x,其值为1,但我得到了错误。

请解释一下,我觉得很简单。

0
0 Comments

在Python中理解全局和局部作用域的方法

问题的出现原因是:当在一个作用域中对变量进行赋值时,该变量变成了该作用域的局部变量,遮蔽了外部作用域中同名的变量。因此,在函数foo中最后一条语句给x赋了一个新值后,编译器将其识别为局部变量。因此,在之前的print(x)语句中尝试打印未初始化的局部变量时,会出现错误。

解决方法是:在函数定义时,而不是执行时,决定哪些名称是局部的,哪些是全局的。这意味着解释器首先对作用域中的变量进行初始化操作,然后逐行执行代码。

以下是原文内容的整理:

根据Python文档的FAQ中的解释,你的问题已经有所解释。

这是因为当你在一个作用域中对变量进行赋值时,该变量变成了该作用域的局部变量,遮蔽了外部作用域中同名的变量。由于foo函数中的最后一条语句给x赋了一个新值,编译器将其识别为局部变量。因此,在之前的print(x)语句中尝试打印未初始化的局部变量时,会出现错误。

这是否意味着解释器的第一个操作是对作用域中的变量进行初始化?只有在之后逐行执行代码吗?

语句是按顺序执行的,但决定哪些名称是局部的,哪些是全局的是在函数定义时而不是执行时做出的决策。

0