【问题标题】:Why does swapping the LHS and RHS of an equation give an error?为什么交换方程的 LHS 和 RHS 会产生错误?
【发布时间】:2019-06-08 13:19:13
【问题描述】:
def add_10(x):
    tenplus=x+10
    return tenplus
add_30=add_10(30)
add_90=add_10(90)

如果我交换最后两行,我得到:

def add_10(x):
    tenplus=x+10
    return tenplus
add_10(30)=add_30
add_10(30)=add_90

有一个错误。 计算机如何读取第二个版本?

【问题讨论】:

  • 我认为这不适用于任何语言。如何对函数调用进行赋值?我不清楚你为什么希望它起作用
  • 您通过x=value 分配而不是value=x 并用于比较使用x==value
  • 我认为您在数学交换示例方面考虑得太多了。在编程中(至少在 Python 中),= 是一个赋值,并且是单独的。其他语言在语法上有所不同,但我认为它们的赋值顺序并没有什么不同。
  • 许多编程语言使用= 进行赋值,尽管这在数学上令人困惑和/或烦人。为了避免这种情况,例如Pascal 使用 := 代替;这也是being made available as a synonym in a forthcoming version of Python,尽管规范的= 分配不会很快消失。 (我相信 := 在黑暗时代被选为 ⇐ 的 ASCII 近似值。)
  • (更详细地查看 PEP572,即使在 3.8 中,您也无法使用 := 直接替代 =。)

标签: python


【解决方案1】:

它们不是方程;他们是任务。不要将= 混淆为数学等式符号。这是一个赋值运算符。它将 RHS 分配给 LHS。

假设赋值运算符是 而不是=。然后这会将add_10(30) 的结果分配给一个名为add_30 的变量:

add_30 ← add_10(30)

这会...将add_30 分配给函数调用add_10(30)?这是什么意思?这并不完全有意义,不是吗?

add_10(30) ← add_30     # huh?

确实,当我第一次开始编程时,我也对= 感到困惑。我们程序员现在都已经习惯了=,但在 70 年代发明 C 的时候,它不一定是最好的选择。事实上,被设计为教学语言的 Pascal 故意发明了一种新的非对称赋值运算符,以免混淆数学学生。 =equality 运算符,而不是 assignment

add_30 := add_10(30)
if add_30 = 40 then ...

很遗憾,它没有流行起来。 C 赢得了影响力战争,大多数现代语言的语法都基于 C,所以= 分配它是。

【讨论】:

    【解决方案2】:

    这里,“=”是一个赋值运算符。在第一种情况下,您将已知值分配给未知变量 - 这是有道理的。在第二种情况下,我不确定您要达到什么目的。

    【讨论】:

      猜你喜欢
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      相关资源
      最近更新 更多