python变命名空间有三个:本地命名空间,全局命名空间,系统自带命名空间(built-in,使用需要导入),各个命名空间都有自己对应的作用域。局部变量修改全局变量需要加入global关键字,内嵌局部变量修改局部变量需要加nonlocal申明,不然会报未定义错误
name 'msg_inner' is not defined
另外 if,for,while不再产生新的命名空间,循环体外可以随便掉用,这跟c,java有差别
记录下写python遇到的类似的问题:
UnboundLocalError: local variable 'a' referenced before assignment
def test():
a = 10
if a < 5 :
b=10
print(b)
test()
其中if循环没有执行,那就相当于只是定义了b这个变量,没有对其赋值,所以会报错。