【发布时间】:2012-01-20 15:42:30
【问题描述】:
我只是想看看变量作用域是如何工作的,结果遇到了以下情况(都是从终端运行的):
x = 1
def inc():
x += 5
inc()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in inc
UnboundLocalError: local variable 'x' referenced before assignment
我在想我的方法中可能无法访问 x,所以我尝试了:
def inc():
print(x)
1
所以这行得通。现在我知道我可以做到:
def inc():
global x
x += 1
这会起作用,但我的问题是为什么第一个示例会失败?我的意思是我希望print(x) 工作后x 在函数内部可见,那么为什么x += 5 会失败?
【问题讨论】:
-
不到 24 小时前,有人问了very similar question,也许你想看看。
-
每个人都把事情复杂化了,而忽略了使用
global的最重要的功能。也就是说,您可以在函数定义之后定义一个变量x,然后仍然使用global x在该函数内部使用/访问它。 -
在 Python 中,仅在函数内部引用的变量是隐式全局的。如果一个变量在函数体中的任何位置被赋值,除非明确声明为全局变量,否则它被假定为局部变量。有关详细信息,请参阅此链接:docs.python.org/faq/…
标签: python