错误的意思是:本地变量xxxx在引用前没有赋值
涉及的知识点:局部变量和全局变量
局部变量:在一个函数中使用的变量称为局部变量,不允许在函数外或另一函数使用。但该函数执行完毕,局部变量所占有的空间也被释放
#局部变量的作用域
def fun1():
x = 5
y = 6 #fun1()中的y和fun2()中的y互不相干
print(x+y)
def fun2():
y = 1
print(x+y) #只有fun1()中有x,但是fun2()不能引用
fun1()
fun2()
NameError: name 'x' is not defined
#上述程序报错,由于x为fun1()函数定义的局部变量,fun1()执行完毕之后,x不复存在。
#改成下面的形式:
def fun1():
x = 5
y = 6 #fun1()中的y和fun2()中的y互不相干
print(x+y)
def fun2(x):
y = 1
print(x+y) #fun2()中也有x,与fun1()中的x虽然名字相同,但此处为fun2()函数参数。两个x属于不同函数
fun1()
fun2(3)
>>>
11
4
全局变量:在所有函数外定义的变量为全局变量。全局变量既可以在主程序中,也可以在各函数中使用
#全局变量的作用域
x = 'outside'
y = 'global'
def f():
x = 'inside'
print(x)
print(y)
f()
print(x)
print(y)
>>>
inside
global
outside
global
>>>
举个例子:
x = 'inside'
y = 'global'
def f():
y = y+" var"
print(x)
print(y)
f()
UnboundLocalError: local variable 'y' referenced before assignment
错误原因:
由于Python语言采用的是”动态类型“技术,变量使用前不需要先声明,对变量的赋值即可自动创建变量。
上述程序中的赋值语句 y= y+"var"将在函数内部创建一个局部变量y,但在创建是等号右边的y(也是局部变量)还不存在,所以会出错。
为了防止变量在引用的过程中出错,通常全局变量使用global语句,来告知某变量为全局变量
x = "outside"
y = "global"
def f():
global y #声明y为全局变量
y = y+ " var"
print(x)
print(y)
f()
#输出结果
>>>
outside
global var
global var
>>>