python当变量有值时,为什么会出现UnboundLocalError?[通俗易懂]

Python (83) 2023-04-14 17:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说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

来源:PY学习网:原文地址:https://www.py.cn/article.html

发表回复