前言:报local variable ‘x‘ referenced before assignment错误 通常是两种原因: 一是函数试图修改全局变量;
二是内部函数试图修改外部函数变量。
先介绍两个概念:
1.局部变量是定义在函数内部定义并使用的变量,它只在函数内部有效。
2.全局变量是定义在函数外部,它既可以在各函数的外部使用,也可在各函数内部使用。
情况一:函数欲修改全局变量
声明在最前面的变量就是全局变量,通俗讲就是公用的,所以func1在 ‘小岳岳’ 后面拼接 ‘唱歌’ 字符串时没有修改权限当然会报错;但func2中的变量name是局部变量,它自己可以随便修改
name = '小岳岳' # 全局变量,声明在函数外(公用的)
def func1():
name += '唱歌'
print(name)
func1() #--> 系统报错:local variable ‘name‘ referenced before assignment
def func2():
name = '小月月' # 局部变量,声明在函数内(自用的)
name += '大美女'
print(name)
func2() #--> 小月月大美女
解决方法:用 global 1 声明name为全局变量
name = '小岳岳'
def func1():
global name
name += '唱歌'
print(name)
func1() # --> 小岳岳唱歌
情况2:内部函数欲修改外部函数变量
这种情况可以理解成,i 是func的局部变量,但对in_func则是全局变量
def func():
i = 99
def in_func(): # 内部函数
i += 1
print(i)
in_func()
func()
解决办法是加 nonlocal 2
本人能力能力有限,希望能帮到你