您的位置:首页 > 编程语言 > Python开发

Python中全局变量与局部变量错误

2017-12-19 16:06 197 查看


Why am I getting an UnboundLocalError when the variable has a value?

It can be a surprise to get the UnboundLocalError in previously working code when it is modified by adding an assignment statement somewhere in the body of a function.
This code:

>>> x = 10
>>> def bar():
...     print x
>>> bar()
10


works, but this code:

>>> x = 10
>>> def foo():
...     print x
...     x += 1


results in an UnboundLocalError:

>>> foo()
Traceback (most recent call last):
...
UnboundLocalError: local variable 'x' referenced before assignment


This is because when you make an assignment to a variable in a scope, that variable becomes local to that scope and shadows any similarly named variable in the outer scope. Since the last statement in foo assigns a new value to x,
the compiler recognizes it as a local variable. Consequently when the earlier print x attempts to print the uninitialized
local variable and an error results.
In the example above you can access the outer scope variable by declaring it global:

>>> x = 10
>>> def foobar():
...     global x
...     print x
...     x += 1
>>> foobar()
10


This explicit declaration is required in order to remind you that (unlike the superficially analogous situation with class and instance variables) you are actually modifying the value of the variable in the outer scope:

>>> print x
11
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: