python 针对修改变量值的特殊情况
6.4.1.只能修改局部变量
在 python 的函数中, 修改一个变量的值的时候,永远操作的是局部变量
为什么会这样呢?
这其实是由 python 定义变量的方式所决定的.
python 不需要显示的去定义变量,直接赋值的时候如果变量不存在直接就定义了.
如果在函数内部可以直接修改外部作用域变量的值,则就无法定义一个同名变量了.
所以, python 才规定不能在函数内部直接修改外部作用域变量的值.
a = 10
def foo():
a = 20 # 这里其实是新创建了一个局部变量 a .并不是修改的全局作用域的变量 a
print(a) # 根据作用域的查找规则,这里访问的是局部变量 a
foo()
print(a) # 根据作用域查找规则,这里访问的是全局作用域的 a
6.4.2.变量必须先赋值才能使用
看下面的代码:
a = 10
def foo():
a = a + 2
foo()
说明:
a = a + 2
这行代码有问题. 为什么?
首先要搞清楚 a + 2
中的a
是局部变量还是全局变量?
是局部变量a
!
在解释器运行这个函数的时候, 已经检测到函数内部有创建局部变量a
, 所以这个时候你访问到的一定是局部变量a
.
a + 2
中的局部变量a
还没有 被赋值,所以和 2 相加抛出了异常.UnboundLocalError
a = 10
def foo():
print(a)
a = 20
foo()
说明: 原因和前面的一样的.
解析器已经检测到你后面会声明局部变量a
, 所以print(a)
中的 a
仍然是局部变量.但是还没有赋值,所以就抛异常了
总结:
在函数内部如果你定义了局部变量,那么你在任何地方都没有办法访问到函数外部作用域的同名变量.