全局变量和局部变量的麻烦

时间:2012-10-08 02:02:41

标签: python python-2.7

我知道这是一个讨论很多的话题,我知道有很多关于它的主题(我已经全部阅读过了),但我仍然只是不明白。

未定义的变量(本地和全局)是我在Python中遇到的最大问题,我不知道在尝试修复它时我正在做什么。我将通过并添加一个x = 0或一个var = func(var)一些地方,有时它有效,有时它不会。令人难以置信的沮丧,我真的需要一些帮助。我问过我的老师,但通常需要一段时间才能回到我身边,我希望能解决这个问题。

以下是我的工作内容:http://pastebin.com/KTuh7D2p(这是针对学校的。)

有人可以向我解释变量吗?

我一直收到这样的错误:

Traceback (most recent call last):
  File "Project1-v2.py", line 144, in <module>
    main()
  File "Project1-v2.py", line 12, in main
    itemsSave = tagYell(items, itemsSale, itemsSave)
UnboundLocalError: local variable 'itemsSave' referenced before assignment

2 个答案:

答案 0 :(得分:2)

在这种特殊情况下,我猜这是因为你试图用itemSave来定义自己。这相当于说:

x = 5 + x

您第一次定义x

在尝试使用其值之前,您需要提供一些关于itemSave的背景信息。

例如,这个程序:

myNum = 5
x = float(myNum+x)
print x

会给我一条错误消息:

x = float(myNum+x)
NameError: name 'x' is not defined

然而,这样可以正常工作,并打印“15”:

myNum = 5
x = 10
x = float(myNum+x)
print x

答案 1 :(得分:2)

所以这是你要问的一段代码

def main():
    print "Welcome to the shop!"
    menu()
    itemsSale = 0
    items = getItems()
    itemsSave = tagYell(items, itemsSale, itemsSave)
    itemsSale = calcTax(itemsSale)
    taxTags(items)
    printInfo(items, itemsSale, itemsSave)
    enterItem = input("To enter another item number, press 1. To end, press 0: ")
    print #Line break      

此行导致错误

itemsSave = tagYell(items, itemsSale, itemsSave)

您正试图将itemsSave传递到tagYell()函数,但它还没有值。

Python知道这是因为你在同一范围内分配给itemsSave,即。 itemsSave = ...它必须是一个未绑定的局部变量,因此它甚至不会查看全局变量以查看它是否在那里定义。