解决:UnboundLocalError: local variable ‘a‘ referenced before assignment

本文深入探讨了Python中出现`UnboundLocalError`的原因,重点在于解释函数内部如何判断变量是全局还是局部。通过两个代码示例,说明了当函数内对变量进行赋值操作时,Python会默认将其视为局部变量,导致未赋值就引用的错误。解决方案是使用`global`关键字来明确指定引用全局变量。
摘要由CSDN通过智能技术生成

项目场景:

提示:这里简述项目相关背景:

Python

解决:UnboundLocalError: local variable ‘a’ referenced before assignment

提示:这里描述项目中遇到的问题:

首先来看两段代码以及代码的执行结果:

a = 0
def test():
        print a
        a += 1
test()

执行结果: ** UnboundLocalError: local variable ‘a’ referenced before assignment **

a = 0
def test():
        print a 
        b = a + 1
test()

执行结果: 0


原因分析:

提示:这里填写问题的分析:

第二段的代码的执行结果是1很好理解, 因为print a的时候a引用的是全局变量a, 而此时全局变量a的值是0。

但是为什么第一段代码在print a的时候会报local variable ‘a’ referenced before assignment的错呢?此时引用的a难道不是全局变量a吗?答案:不是。

要解释清楚这个问题,首先让我们来看看python是如何确定在函数中引用的变量究竟是全局变量还是局部变量的,根据 文档可以看出有如下几个规则:

**

如果在函数内部使用了global修饰变量,那么引用的是全局变量 在没有使用global修饰变量时,如果在函数中没有对变量赋值,那么* 默认 *函数中引用的变量是全局变量

**

在没有使用global修饰变量时,如果在函数中对变量赋值了,那么默认函数中引用的是局部变量。
代码一中,由于在函数中使用a += 1 对变量a赋值了,所以print a时,引用的是局部, 而此时又还没执行到a += 1 所以会报错。

代码二中,由于整个函数都没有对变量a赋值, 所以print a时引用的是全局变量, 而全局变量a = 0, 所以执行结果为0。

链接:https://www.jianshu.com/p/ba7ded1ecbe4


解决方案:

提示:这里填写该问题的具体解决方案:

使用global修饰变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值