在 python 中不使用 `global` 关键字引用函数内部时出错

Error when referencing a inside a function without using `global` keyword in python

为什么以下代码会引发 UnboundedLocalError:

n = 0
def foo():
    n = n + 1
    print(n)
foo()
foo()

错误:

Traceback (most recent call last):
  File "foo.py", line 5, in <module>
    foo()
  File "foo.py", line 3, in foo
    n = n + 1
UnboundLocalError: local variable 'n' referenced before assignment

虽然以下代码有效:

n = 0
def foo():
    print(n)
foo()
foo()

输出:

0
0

在我看来,鉴于第二个片段的行为,第一个片段应该使用 global n 的值来计算 n+1并将其分配给一个新的 local n,然后打印出来。因此,我希望输出是两个 1。为什么这不会发生?

只要你写了n = ...n就变成了整个函数作用域的local变量。要使名称 n 引用 global 变量,您必须使用 global 语句。

在第二个例子中,n没有赋值,所以n是未定义的。这是一个 free 变量,它的值将从最近的封闭范围中获取,其中 n 定义的。