更新参数值不会更新函数的结果?

时间:2018-03-31 11:36:36

标签: python python-3.x

我是编程新手......

L = [1, 2, 3, 4, 5]
n = 1
S = sum(L[0:n])

while n < 5:
    n += 1

print(n)  # output: 5
print(S)  # output: 1

为什么python不会更改n函数中的参数sum,而它本身会更改n?有人可以解释其背后的逻辑,并告诉我如何更改n函数中的sum,以便S变为15而不是1?

2 个答案:

答案 0 :(得分:3)

Python是imperative programming language。这意味着python程序是一系列语句,可以改变程序的状态(例如通过为变量赋值)。一旦语句执行,它就不再对程序产生影响。换句话说:语句可以改变程序的状态,但只能改变一次。

执行语句S = sum(L[0:n])时,sum(L[0:n]) 已评估,结果将分配给变量SL[0:n]评估为[1][1]的总和为1.因此,在本声明的最后,S的值为数字1。

您的误解是S“记得”它等于sum(L[0:n]),但事实并非如此。 S只是数字1.如果您更改nL的值,则无关紧要。数字1保持数字1.如果您希望更改S,则必须使用另一个赋值语句显式更新它:

L = [1, 2, 3, 4, 5]
n = 1
S = sum(L[0:n])

while n < 5:
    n += 1
    S = sum(L[0:n])

print(n)  # output: 5
print(S)  # output: 15

旁注:Sn更改时会自动更新declarative programming languages的语言。

答案 1 :(得分:2)

它仅在开始时评估S = sum(L[0:n]),它不是更新的函数。更改此设置的一种方法是在更新n:

后重新评估S.
L = [1, 2, 3, 4, 5]
n = 1

while n < 5:
    n += 1
    S = sum(L[0:n])
    print(n, S)