x = 1 def change(a): x += 1 print(x) change(x)
首先排版的缩进问题就会报错,先给出顺眼的排版:
x = 1 def change(a): x += 1 print x change(x)
其次抛开排版不讲,以上代码运行后第 3 行会报以下错误:
UnboundLocalError: local variable 'x' referenced before assignment
即 change(a) 函数内的局部变量 x 在使用前未定义。
解法一:用 global 声明变量 x,使其成为全局变量
x = 1 def change(a): global x x += 1 print x change(x)
解法二:将函数内的 x 参数改为 a
x = 1 def change(a): a += 1 print a change(x)
以上解法均能得到结果 2。
写了几年Python了,来回答一下这道题。
这道题考察的是Python的变量作用于(即LEGB规则)
x = 1
def change(a):
x += 1
print x
change(x)
对于原问题,高票解释得已经足够了,我想补充一点,如果是对于change()函数内访问x而不去修改它,这样的操作是合法的,即
x = 1
def change(a):
# 这里我们并没有修改x
print x+a
change(x)
引申一下: 闭包的情况下,嵌套函数修改上层变量同样需要类似global
的关键字nonlocal