抱歉,我的英语不是很好,但我想我可以说清楚。
代码1:
# coding:utf-8
sum = 5
def add(x, y):
print sum
sum = x + y
if __name__ == '__main__':
add(7, 8)
当我运行此代码时,出现错误,下面是错误消息。
ssspure:python ssspure $ python test.py Traceback(最近一次调用最后一次): 文件“test.py”,第11行,in 加(7,8) 文件“test.py”,第6行,添加 打印总和 UnboundLocalError:赋值前引用的局部变量'sum'
代码2:
# coding:utf-8
sum = 5
def add(x, y):
sum = x + y
print sum
if __name__ == '__main__':
add(7, 8)
我可以成功运行code2。
我只是在“sum = x + y”语句下面移动“打印总和”,为什么code1出错,code2运行成功!
答案 0 :(得分:0)
对于code1:
你没有宣布总和。您在add函数之外定义的总和对添加函数的总和没有影响。
你可以在你的函数中放置sum = 0,这样就可以了。
事实上,你在code2中这样做了。你将和未结算为x + y
答案 1 :(得分:0)
问题是因为局部变量和全局变量具有相同的名称。因此,该函数将优先考虑局部变量。因为未分配局部变量,所以它给出了错误,未分配局部变量。
我们可以通过以下方式解决此问题: 1.在函数中使用全局关键字 2.保持名字不同。 3.使用函数globals()
谢谢