原因:
在函数内部更改全局变量就会出现此错误。
注意:
对于全局变量的修改,
如果全局变量是int或者str,那么如果想要在函数中对函数变量进行修改,则需要先在函数内,声明其为global,再进行修改
如果是list或者dict则可以直接修改
例一(不会报错):
a= 3
def temp():
print(a)
temp() #输出的结果为3
在上面一段代码中,函数temp的操作是打印a的值,但函数内部并没有对a进行定义,此时系统会在外部寻找a的值,而我们在函数外部给a赋值为3,这种在函数外部赋值的变量被称为全局变量(global variable),这种情况下运行函数temp不会出错,
例二(会报错):
a= 3
def temp():
print(a)
a+=1
temp() #会报错, UnboundLocalError: local variable 'a' referenced before assignment
原因是我们定义的函数temp内部第一次打印a是调用的全局变量,而打印后却令a=a+1,在函数内部试图更改全局变量a导致错误。
例三(改正例二):
如果我们确实希望通过函数temp打印全局变量a,并且将a的值加1,那么就要在函数内部声明全局变量。
a= 3
def temp():
global a #声明我们在函数内部使用的是在函数外部定义的全局变量a
print(a)
a+=1
temp()
调用temp函数,不会再报错了。此时就会发现a的值确实变成4
总结:
不要在函数内部改变全局变量的值,如果确实想改变全局变量的值(以a为例),那么需要在函数内部首先声明,即加上global a这一行代码。
参考资料:
python中全局变量的修改 – 我们都是大好青年 – 博客园 (cnblogs.com)
local variable referenced before assignment 原因及解决办法_sinat_40304087的博客-CSDN博客
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/102994.html