なぜ「**」より緊密に否定よりも結合していますか?
-
06-09-2019 - |
質問
私はちょうど次のシナリオにかまれました。
>>> -1 ** 2
-1
さて、Pythonのドキュメントを掘り、それは、これは意図されていることは明らかです行動のが、のなぜ?の私は、組み込み演算子としてのパワーを他の言語では動作しませんが、しっかりできるだけ私に危険な反直感的なようだと単項否定バインドを持っていません。
それがこのように行われていた理由はありますか?電源事業者と他の言語では同じように動作しますか?
解決
その振る舞いは、数学の式の場合と同様であるので、私はわからない問題が何であるか、またはなぜそれが直感的です。あなたが別の何かを見ているどこに説明できますか? "**" いつも以上にバインド " - ":-x ^ 2(-x)^ 2
と同じではありませんちょうどあなたが数学でやると思いとおりに、(-1)** 2を使用します。
他のヒント
短い答え:それは優先順位は数学で動作し、標準的な方法です。
のは、私は多項式3X + 5 2 3X ののを評価したいとしましょう。
def polynomial(x):
return 3*x**3 - x**2 + 5
これは、より...
良く見えますdef polynomial
return 3*x**3 - (x**2) + 5
そして、最初の方法は、数学者がそれを行う方法です。累乗と他の言語と同じように動作します。否定演算子は、より緩く、乗算よりも結合することに注意してください、そう
-x*y === -(x*y)
彼らは数学でそれを行う方法もある。
、それは次のようになります。 - それは**より緊密単項より結合することにより回避することができるので、端数の力に上げ負の数は、虚数成分(通常)で終わります。ほとんどの言語は、虚数は好きではありません。
最終的には、もちろん、それだけで大会だ - と自分でコードを読みやすくするために、他ダウンラインを、あなたはおそらく、明示的にグループ化するでしょう、あなたの(-1)ので、誰もが他の同じトラップに引っかかるんます:)幸運!
これは、私には直感的なようです。
拳、それは数学notaitonと一致だから:-2 ^ 2 = -4
第二に、広く長い時間前にFORTRANで導入されました**演算子。 FORTRANでは、-2 ** 2も、-4です。
OCamlは同じことをしていません。
# -12.0**2.0
;;
- : float = 144.
これは一種の奇妙な...
# -12.0**0.5;;
- : float = nan
しかしそのリンクを見てください... 動作の順序の