【问题标题】:Variable not changing after assigning another value to its dependent variable变量在为其因变量分配另一个值后不变
【发布时间】:2017-09-23 00:56:10
【问题描述】:

在 Python 3.5 shell 中输入以下代码给了我一个我没想到的答案,我知道非常基本,但请有人帮我解释一下。

>>> x = 5
>>> y = 2
>>> a = x*y
>>> x,y,a
(5, 2, 10)

>>> x = 3
>>> x,y,a
(3, 2, 10)

这些都在不同的行上,每行前面都有 >>>

我预计是 6,但“新”x 尚未使用。

【问题讨论】:

标签: python variables


【解决方案1】:

“a”变量只有在您有意更新时才会更新。 为了在更改 'x' 后更新 'a',您需要再次执行 a = x*y 行。

如果您将代码复制并粘贴到此处http://www.pythontutor.com/visualize.html#mode=edit,它将使您对正在发生的事情有一个很好的可视化!

【讨论】:

    【解决方案2】:

    a = x*y 不是在您更改xy 时自动更新a 的方程式。当语句运行时,它将a 设置为x*y 一次。之后对xy 的任何更改都不会影响a

    当您更改xy 时,您需要手动更新a,或者,如果情况允许,请使用本地函数来执行@Silvio 的答案显示的操作。创建本地快捷方式来帮助清理代码很方便。

    【讨论】:

      【解决方案3】:

      当您分配a 时,该值即在此处设置。

      a = x * y
      

      使用xy当前 值。表达式 x * y 没有存储在任何地方,所以 Python 不可能知道更新它。如果您想要一个根据其变量的值自动更新的值,您可以使用闭包。

      x = 5
      y = 2
      a = lambda: x * y
      print(x, y, a()) # Prints 5 2 10
      x = 3
      print(x, y, a()) # Prints 3 2 6
      

      这样可以确保每次调用 a 时都会计算表达式。

      【讨论】:

        【解决方案4】:

        a 变量不会被更新。您可能希望以这种方式创建函数

        def a(x,y):
            return x*y
        

        然后你就可以创建元组了

        (x, y, a(x,y))
        

        【讨论】:

        • 那么 OP 要求的解释在哪里?
        猜你喜欢
        • 1970-01-01
        • 2018-03-17
        • 1970-01-01
        • 2022-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-06
        • 1970-01-01
        相关资源
        最近更新 更多