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

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

  1. 代码一:
a = 0
def test():
        print a
        a += 1
test()

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

  1. 代码二:
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是如何确定在函数中引用的变量究竟是全局变量还是局部变量的,根据 文档可以看出有如下几个规则:

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容