【问题标题】:What is this piece of Python code doing?这段 Python 代码在做什么?
【发布时间】:2009-09-02 23:03:11
【问题描述】:

以下是我发现的解决数学问题的 Python 代码的 sn-p。它到底在做什么?我不太确定要 Google 做什么。

x, y = x + 3 * y, 4 * x + 1 * y

这是一种特殊的 Python 语法吗?

【问题讨论】:

    标签: python math syntax


    【解决方案1】:
    x, y = x + 3 * y, 4 * x + 1 * y
    

    相当于:

    x = x + 3 * y
    y = 4 * x + 1 * y
    

    除了它在两个计算中都使用 x 和 y 的原始值 - 因为在两个计算完成之前不会分配 x 和 y 的新值。

    通用形式是:

    x,y = a,b
    

    其中 a 和 b 是表达式,其值分别分配给 x 和 y。您实际上可以将任何元组(逗号分隔值集)分配给任何相同大小的变量元组 - 例如,

    x,y,z = a,b,c
    

    也可以,但是

    w,x,y,z = a,b,c
    

    不会因为右侧元组中的值数量与左侧元组中的变量数量不匹配。

    【讨论】:

    • 我认为临时变量增加了清晰度。希望你不介意
    • 我实际上认为用强调的“除了”来解释它可以更清楚地说明这一点,所以我恢复了更改。无论如何,感谢您的改进尝试,我只是碰巧对此事有不同的看法。 :)
    • 非常有意义。看到它用括号括起来就很清楚了。很容易快速阅读并错过那个小细节。谢谢!
    【解决方案2】:

    这是对tuple 的赋值,也称为序列解包。当您在元组周围添加括号时可能会更清楚:

    (x, y) = (x + 3 * y, 4 * x + 1 * y)
    

    x + 3 * y 分配给x,值4 * x + 1 * y 分配给y

    相当于这样:

    x_new = x + 3 * y
    y_new = 4 * x + 1 * y
    x = x_new
    y = y_new
    

    【讨论】:

    • 如果对括号进行不同的分组,可能会更清楚:x, y = (x + 3 * y), (4 * x + 1 * y)。逗号在那里很容易被忽略。
    • 啊,是的,括号说明了一切——在[拍前额]之前眼睛看不到它......
    【解决方案3】:

    我最近也看到这被称为“同时分配”,这似乎抓住了几个答案的精神。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-17
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 2015-01-16
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多