看你的代码出错的地方应该是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()
|