私は次のシナリオに噛まれました:
>>> -1 ** 2
-1
さて、Python ドキュメントを掘り下げると、これが意図された動作であることは明らかですが、なぜでしょうか? 私は組み込み演算子として機能する他の言語を使用していませんが、単項否定をできるだけ厳密にバインドしないことは、危険なほど直観に反しているように思えます。
このようにした理由はありますか?べき乗演算子を持つ他の言語は同様に動作しますか?
私は次のシナリオに噛まれました:
>>> -1 ** 2
-1
さて、Python ドキュメントを掘り下げると、これが意図された動作であることは明らかですが、なぜでしょうか? 私は組み込み演算子として機能する他の言語を使用していませんが、単項否定をできるだけ厳密にバインドしないことは、危険なほど直観に反しているように思えます。
このようにした理由はありますか?べき乗演算子を持つ他の言語は同様に動作しますか?
その動作は数式と同じなので、何が問題なのか、なぜ直観に反するのかわかりません。どこで違うものを見たのか説明できますか? "**" は常に "-" より多くバインドします: -x^2 は (-x)^2 と同じではありません
数学で行うのとまったく同じように、(-1) ** 2 を使用するだけです。
簡単な答え: これは、数学で優先順位が機能する標準的な方法です。
多項式 3x 3 - x 2 + 5を評価したいとしましょう。
def polynomial(x):
return 3*x**3 - x**2 + 5
それはよりよく見えます...
def polynomial
return 3*x**3 - (x**2) + 5
そして最初の方法は、数学者が行う方法です。べき乗を使用する他の言語も同じように機能します。否定演算子も乗算よりも緩くバインドされることに注意してください。
-x*y === -(x*y)
これは、彼らが数学で行う方法でもあります。
推測する必要があるとすれば、指数演算子を使用すると、プログラマーは数値を簡単に分数で累乗できるからです。分数で累乗された負の数は (通常) 虚数部になるため、** を単項 - よりも強くバインドすることで回避できます。ほとんどの言語は虚数を好みません。
もちろん、最終的には、これは単なる慣例です。コードを自分自身や他の人が後で読めるようにするために、(-1) を明示的にグループ化して、他の誰も同じトラップに引っかからないようにすることをお勧めします :) 良い幸運!