|
发表于 2022-3-12 19:59:43
|
显示全部楼层
看你的代码出错的地方应该是var=3这一句,出错的原因是修改局部变量的值。默认情况下Python不允许在函数内修改全局变量的值,函数内定义的子函数也不允许修改外部函数的局部变量。print(var)这一句是可以运行的,因为它只是访问了局部变量var的值而没有修改它,但是var=3这一句就是在修改局部变量var的值了,这种行为违反了语法所以报错。
你可以这样修改inside这个函数
- def inside():
- nonlocal var
- print(var)
- var = 3
复制代码
所以概括来说就是如果不用global或者nonlocal关键字声明,则只能在函数内访问全局变量或局部变量的值,但是不能修改它们的值。
更多例子:
- # 全局变量
- var = 'hello'
- # 访问但不修改
- def access_global():
- print(var)
- # 错误修改全局变量
- de wrong_modify_global():
- var = 10 # 报错
- print(var)
- # 正确修改全局变量
- def right_modify_global():
- global var # 声明var为全局变量,不是局部变量
- var = 10
- print(var)
- # 访问局部变量
- def access_local():
- var = 233
- def inside():
- print(var) # 只访问但不修改
- inside()
- # 正确修改局部变量
- def right_modify_local():
- var = 233
- def inside():
- nonlocal var # 声明var为局部变量
- var = 666
- print(var)
- inside()
复制代码 |
|