开发者社区> 问答> 正文

Python全局变量和局部变量的问题?报错

# coding:utf-8
sum = 5
def add(x, y):
    print sum
    sum = x + y

if __name__ == '__main__':
    add(7, 8)

上面的代码在执行的时候会出错,错误信息是:
Traceback (most recent call last):
  File "test.py", line 11, in <module>
    add(7, 8)
  File "test.py", line 6, in add
    print sum
UnboundLocalError: local variable 'sum' referenced before assignment


想请教一下为什么会出错,
在print sum的时候sum用的是全局变量sum,之后的sum = x+y相当于在add函数内部创建一个局部变量sum,我觉得应该没什么问题。但是就是报错了。


如果将print语句拿到sum赋值语句语句下面就不会报错,代码如下
# coding:utf-8
sum = 5
def add(x, y):
    sum = x + y
    print sum

if __name__ == '__main__':
    add(7, 8)

哪位大神能解释一下吗?不胜感激!

展开
收起
爱吃鱼的程序员 2020-06-09 15:51:07 654 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    错误信息是:sum在未赋值前就被引用

    简单地说:函数内部定义的为局部变量。

    python中要使用变量,必须先给变量赋值。

    去掉函数里面的sum=x+y(或者改变这个变量名)

    或者函数内部globalsum,在printsum;

    或者和你第二个代码那样把sum=x+y提到printsum前面


    回复 @FuXing福兴:好的,明白了,谢谢了回复 @ssspure:你自己也知道先找局部的啊,你printsum时,它先找自身函数内部是否有这个变量。(你的代码中它就认为你没声明就引用就报错!)我看到书上说的是,Python会先找局部变量,局部变量找不到的时候找全局变量,全局变量找不到的时候才会报错,但是第一段程序里面sum在全局变量里面是有的,为什么还会报错呢global没有缩进看不懂啊回复 @ssspure:不是大神,也初学,刚看到过这个局部变量,你看下第三个人的回复不好意思,修改了,大神你再看看

    一旦解释器“发现”你在函数内部对sum赋了值,sum在这个函数里就变成了局部变量,也就是说,即使在第一行就访问sum,不显示注明global的情况下也是表示局部的sum,然而真正创建sum的语句还在后面。

    2020-06-09 15:51:26
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载