UnboundLocalError: local variable 'xxxx‘' referenced before assignment

错误的意思是:本地变量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
>>>
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值