为什么这个函数不能正确更新变量?

Why doesn't this function update the variable properly?

基本上,一旦此代码为 运行,程序将打印 20, 20;然而,我希望它做的是在之前的黄金基础上再增加 20。所以程序应该打印 20, 40。

gold = 0

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

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

display()
gold = 0

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

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

display()

问题是,当您调用 calculate() 时,您传递的是变量 gold 的当前 ,而不是变量本身。

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

如果您 return 来自 calculate 的新值,您可以更新外部 gold 变量(即将名称 gold 重新绑定到新的 int 对象):

gold = 0

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

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

看起来你的目标是:

gold = 0

def display():
    calculate()
    calculate()

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

display()

由于gold在这里是一个全局变量,所以你不需要显式地将它作为参数传递给calculate