为什么我不能在函数内改变全局变量?

3

这是我的代码:

def displayInventory ():
    print ("Inventory: " + str(inventory))

def enterEcdysis():
    global xcash
    xcash -= 1
    displayInventory()

xcash = 3
inventory = [str(xcash) + ' Cash',] 
enterEcdysis()

我尝试打印出['2 Cash,'],但运行后仍然显示3。我不确定自己哪里做错了。xcash -= 1不应该从全局变量中减去一个吗?
2个回答

3

正在更新xcash,但问题在于inventory已过期。在调用enterEcdysis()之前,将其设置为['3 Cash'],并且在修改xcash后未对其进行更新。

将您的打印语句更改为直接打印xcash,您会发现它运行良好:

def displayInventory ():
    print ("Inventory: {} Cash".format(xcash))

进一步说明:行“inventory = [str(xcash) + ' Cash',]”仅出现一次。它不会在“xcash”更改时自动更改“inventory”的内容。如果您想更改“inventory”,则需要调用代码来更新它。 - Andrew Edgecombe

1
xcash = 3
inventory = [str(xcash) + ' Cash',] 
enterEcdysis()

考虑上面的代码行。在调用enterEcdysis之前,您使用当前值为3的xcash创建并设置了变量inventory。在enterEcdysis中,您从xcash的值中减去了1,但变量inventory保持不变。因此,当您稍后显示变量inventory的值时,仍会显示定义变量inventory时的值(当xcash仍等于3时)。
def displayInventory ():
    print ("Inventory: " + str(inventory) + "\t" + str(xcash))

如果您按照上述修改 displayInventory,您会发现 xcash 的值确实已更改,但您并没有更改 inventory 的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接