为什么这个函数没有正确更新变量?

时间:2016-03-28 22:30:14

标签: python function addition

基本上,一旦运行此代码,程序就会打印20,20;然而,我希望它能够为之前的黄金增加20倍。所以程序应该打印20,40。

gold = 0

def display():
    calculate(gold)
    calculate(gold)

def calculate(gold):
    gold += 10
    gold = gold + 10
    print(gold)

display()

3 个答案:

答案 0 :(得分:4)

问题在于,当您致电calculate()时,您传递的是变量gold的当前,而不是变量本身。

因此,当您在gold中向calculate添加10时,原始gold变量不受影响。这两个变量具有相同的名称,但指向不同的值。下面,我已将其中一个gold2命名为澄清这一点。

如果从calculate返回新值,则可以更新外部gold变量(即将名称gold重新绑定到新的int对象):

gold = 0

def calculate(gold2):
    gold2 = gold2 + 10
    return gold2

gold = calculate(gold)  # 10
gold = calculate(gold)  # 20

答案 1 :(得分:2)

看起来你的目标是:

gold

由于此处calculate是一个全局变量,因此您无需将其作为参数显式传递给{{1}}。

答案 2 :(得分:1)

gold = 0

def display():
    global gold
    gold = calculate(gold)
    calculate(gold)

def calculate(gold):
    gold += 10
    gold = gold + 10
    print(gold)
    return gold

display()