【问题标题】:Updating a parameter's value doesn't update the result of the function?更新参数的值不会更新函数的结果?
【发布时间】:2018-03-31 11:36:35
【问题描述】:

我对编程完全陌生...

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不改变sum函数中的参数n,而它改变了n本身?有人可以解释其背后的逻辑并向我展示一种在sum 函数中更改n 以使S 变为15 而不是1 的方法吗?

【问题讨论】:

  • 您调用了sum 一次,并将它返回的值存储在S 中。如果您想要新的金额,您必须再次致电sum。 Python 变量不像电子表格单元格,它会在其他任何变化时自动更新。 (如果你想这样,你可能想看看,比如说,Prolog 而不是 Python。)
  • 你可能想谷歌“命令式编程”。

标签: python python-3.x


【解决方案1】:

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

旁注:当n 更改时S 将自动更新的语言称为declarative programming languages

【讨论】:

    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-22
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 1970-01-01
      相关资源
      最近更新 更多