为什么这个函数不能正确更新变量?
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
。
基本上,一旦此代码为 运行,程序将打印 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
。