为什么不能从函数内部更改全局变量?

时间:2019-02-06 02:37:23

标签: python python-3.x

这是我的代码:

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 个答案:

答案 0 :(得分:3)

正在更新xcash。问题是inventory已过期。您将在调用['3 Cash']之前将其设置为enterEcdysis(),并且在修改xcash之后不会更新它。

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

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

答案 1 :(得分:1)

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

考虑上面的代码行。 您已经使用 xcash 的当前值(在调用 enterEcdysis 之前为3)创建并设置了变量 inventory 。 在 enterEcdysis 中,您已从 xcash 的值减去1,但变量 inventory 保持不变。 因此,稍后显示变量 inventory 的值时,定义后 inventory 的值仍会显示(当 xcash < / em>仍等于3。)

def displayInventory ():
    print ("Inventory: " + str(inventory) + "\t" + str(xcash))

如果您如上所述修改 displayInventory ,您会看到 xcash 的值确实已更改,但您尚未更改 inventory < / em>。