为什么函数即使在指定全局变量后也不会改变全局变量

时间:2016-07-24 12:15:10

标签: python python-2.7 global-variables

我最近开始编程。一切都运转良好,但这段代码很长一段时间都让我很感兴趣。

这是我的代码。

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变量。但不知道为什么它不起作用。

1 个答案:

答案 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()