为什么即使在指定全局之后,函数也不会改变全局变量
问题描述:
我最近开始编程。一切工作正常,但这段代码很长一段时间让我着迷。为什么即使在指定全局之后,函数也不会改变全局变量
这是我的代码。
addon = 20
startup = 50 + addon
def click():
global addon, startup
addon *= 2
print addon, startup
click()
click()
click()
click()
click()
click()
click()
click()
click()
click()
这是我的输出: -
40 70
80 70
160 70
320 70
640 70
1280 70
2560 70
5120 70
10240 70
20480 70
这是我所期待的: -
40 90
80 170
160 330
320 650
640 1290
1280 2570
2560 5130
5120 10250
10240 20490
20480 40970
我只是没有得到。如果每次调用click
正在更新全局变量addon
比它应该也更新startup
变量。但不知道为什么它不起作用。
答
startup
不存储一个表达,它存储结果的表达式的,一次。
换言之,可变startup
引用结果的50 + addon
,这在当时是整数70
。
addon
addon
以后的变化在这里没有什么区别,因为startup
没有引用addon
。
你不得不做出startup
一个功能相反,每一次调用这个函数,如果你想重新计算表达式:
startup = lambda: 50 + addon
我用lambda
expression在这里创建的功能; lambda
从单个表达式创建一个函数。
你然后调用startup
每次需要看到最新的结果时间:
def click():
global addon
addon *= 2
print addon, startup()
+0
谢谢,我花了很多时间在互联网上搜索但从来没有得到答案。非常感谢。 –
@Sanatan:应该如何'startup'更新?它是否也应该乘以'2'? – kamwo
实际上它是'startup = 50 + addon'而不是'startup = 50'。请帮忙。 –
更改启动的代码在哪里?您将其设置为70并且永不改变它。 –