def spam():
print(eggs)
eggs = 13
eggs = 12
spam()
出现以下错误:
UnboundLocalError: 引用未初始化的本地变量 'eggs'
但是这个例子没有出错:
def spam():
print(eggs)
eggs = 12
spam()
为什么?
def spam():
print(eggs)
eggs = 13
eggs = 12
spam()
出现以下错误:
UnboundLocalError: 引用未初始化的本地变量 'eggs'
但是这个例子没有出错:
def spam():
print(eggs)
eggs = 12
spam()
为什么?
eggs = 13
时,函数尝试在其范围内查找定义,将其视为局部变量,并且由于函数内没有定义这样的变量,因此会抛出local variable 'eggs' referenced before assignment.
异常。eggs
从全局范围内获取,即eggs=12
,因此这里不会抛出任何异常。eggs
。仅在此处引用和更改局部变量eggs
,全局变量eggs
保持不变。原始答案被翻译成“最初的回答”。In [40]: def spam():
...: eggs = 12
...: print(eggs)
...: eggs = 13
...: print(eggs)
...:
...: eggs = 12
...: spam()
...: print(eggs)
12
13
12
eggs
的赋值,所以它被认为是一个局部变量。第二个版本没有对eggs
的赋值,因此它被认为是一个全局变量。 - khelwoodeggs
在第一个函数的中途突然从全局变量变成局部变量;而且你也不希望它在没有声明意图的情况下默默地修改全局变量。 - alexis