使用Python编译变量具有值时,为什么会收到UnboundLocalError?
时间:2021-04-12 浏览次数:17 编辑:user43
Python for Mac是一款免费的Python编程平台,作为当今最受欢迎和最受欢迎的编程语言之一,一直深受大家的喜爱。这里为大家介绍使用Python编译变量具有值时,为什么会收到UnboundLocalError?那么就来看看下面的教程。
通过在函数主体中的某个位置添加赋值语句来修改以前的工作代码中的UnboundLocalError可能令人惊讶。
这段代码:
>>>
>>> x = 10 >>> def bar(): ... print(x) >>> bar() 10
可以,但是这段代码:
>>>
>>> x = 10 >>> def foo(): ... print(x) ... x += 1
导致UnboundLocalError:
>>>
>>> foo() Traceback (most recent call last): ... UnboundLocalError: local variable 'x' referenced before assignment
这是因为当您对作用域中的变量进行赋值时,该变量将成为该作用域的局部变量,并在外部作用域中隐藏任何类似命名的变量。由于foo中的最后一条语句为分配了新值 x,因此编译器将其识别为局部变量。因此,当较早版本print(x)尝试打印未初始化的局部变量时,将导致错误。
在上面的示例中,您可以通过将其声明为全局变量来访问外部作用域变量:
>>>
>>> x = 10 >>> def foobar(): ... global x ... print(x) ... x += 1 >>> foobar() 10
为了提醒您(与类变量和实例变量的表面类似情况不同),实际上需要在外部范围内修改变量的值:
>>>
>>> print(x) 11
您可以使用nonlocal 关键字在嵌套范围内执行类似的操作:
>>>
>>> def foo(): ... x = 10 ... def bar(): ... nonlocal x ... print(x) ... x += 1 ... bar() ... print(x) >>> foo() 10 11