为什么"**"比否定更紧密?

Ben*_*ank 9 python operator-precedence

我被以下情况所困扰:

>>> -1 ** 2
-1
Run Code Online (Sandbox Code Playgroud)

现在,通过Python文档挖掘,很明显这是预期的行为,但为什么呢? 我没有使用任何其他语言作为内置运算符的权力,但没有尽可能紧密的一元否定绑定似乎对我来说是危险的反直觉.

有没有理由这样做?功率运算符的其他语言是否表现相似?

nos*_*klo 22

这种行为与数学公式相同,所以我不确定问题是什么,或者为什么它是反直觉的.你能解释一下你在哪里看到不同的东西吗?"**"总是绑定多于" - ": - x ^ 2与(-x)^ 2不同

只需使用(-1)**2,就像在数学中一样.

  • @Jason,你可能不同意,但这是数学家已经确定的标准. (7认同)
  • @Jason:再次阅读你的预代数书......这不是数学的工作原理. (6认同)

Die*_*Epp 5

简短回答:这是数学中优先级的标准工作方式。

假设我想计算多项式 3x 3 - x 2 + 5。

def polynomial(x):
    return 3*x**3 - x**2 + 5
Run Code Online (Sandbox Code Playgroud)

它看起来比...

def polynomial
    return 3*x**3 - (x**2) + 5
Run Code Online (Sandbox Code Playgroud)

第一种方法是数学家的做法。其他具有幂运算的语言的工作方式相同。请注意,否定运算符的绑定也比乘法更松散,因此

-x*y === -(x*y)
Run Code Online (Sandbox Code Playgroud)

这也是他们在数学中的做法。