我最近开始编程。一切都运转良好,但这段代码很长一段时间都让我很感兴趣。
这是我的代码。
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
变量。但不知道为什么它不起作用。
答案 0 :(得分:1)
startup
不存储表达式,它存储表达式的结果,一次。
换句话说,变量startup
引用50 + addon
的结果,当时它是整数70
。
addon
稍后更改在此处没有任何区别,因为startup
未引用addon
。
您必须改为startup
函数,如果您想重新计算表达式,请每次调用该函数:
startup = lambda: 50 + addon
我在这里使用lambda
expression来创建函数; a lambda
从单个表达式创建一个函数。
每次需要查看最新结果时,请致电startup
:
def click():
global addon
addon *= 2
print addon, startup()