私はいくつかのPython演算子、算術演算とブール演算をオーバーロードしました。 Pythonの優先順位の規則は有効なままです。これは、オーバーロードされた演算子にとって不自然であり、式の中に大量のカッコがあります。 Pythonの優先順位を「オーバーロード」する方法はありますか?Pythonの演算子の優先順位を変更する
答えて
いいえ、それはPython言語自体の一部です。どのように言語が解析されるか
公式引用:Evaluation order
Pythonは左から右に式を評価します。割り当てを評価する の間に、右側は の左側の前に評価されます。
その他の引用:
Python:Basics:Numbers and operators
混合事業者と数学的演算を実行する場合、Pythonは予め決定に基づいて、第一 を実行するためにどのオペレーションを判定することに留意することが 重要です優先順位。この優先順位は、ほとんどのプログラミング言語と同様の優先順位 に従います。
PythonはPEMDAS order of operationsに付着に注意してください。
主な問題は、pythonはコードの解析中に演算子の優先順位を適用することです。その初期の段階では、Pythonはオブジェクトが実際に式に含まれる型を知ることはできません(コードはまだ実行されていないため)。したがって、演算子の優先順位を変更することができた場合は、一般的な数式を含むすべての式に対して演算子の優先順位を設定します。これが可能であれば、標準ライブラリとサードパーティ図書館では、どんな混乱が起こるのか想像してみましょう。 – liori
@liori:素敵な追加!同じ変更されたインタプリタの下であなたのものと混ざっているサードパーティのコードを使用することはできません – jdi
jdiはPythonが何をしているのかだけでなく、なぜ私が何をしたいのかを説明してくれてありがとうございます。 –
あなたは、このようにそのメカニズムをごまかすことができます。すべての事業者が計算を行うが、いくつかのオブジェクトにラップ命令のリストを作成しないために
- オーバーライドを。
- 独自のブラケット演算子(つまり、
_
関数)を追加します。
例:
>>> a = MyNumber(5); b = MyNumber(2); c = MyNumber(3)
>>> a + b * c
MyExpression([MyNumber(5), '+', MyNumber(2), '*', MyNumber(3)])
ブラケット:_
だからあなたがprioritesを逆転場合
(オーダーあなたがそれに強制で)式を評価する関数である
>>> a + _(b * c)
に留意されたいです。あなたは得るでしょう:
>>> _(a + b * c)
MyNumber(21)
PS。 DjangoはQ
とF
の演算子で同様のトリックを行います。
- 1. ブール演算子の優先順位
- 2. 演算子の優先順位c#
- 3. JavaScript演算子の優先順位
- 4. シフト演算子でルビ演算子の優先順位問題
- 5. 演算子優先順位と関連
- 6. Pythonで "="の演算子の優先順位は何ですか?
- 7. Javaの* =演算子の演算子の優先順位は何ですか?
- 8. Scala Parserのアドホック演算子の優先順位を表す
- 9. どの論理演算子が優先順位を取るか
- 10. 出力ストリームにおけるC++演算子の優先順位
- 11. Javaの演算子の優先順位式の評価
- 12. JavaScriptの演算子の優先順位の技術
- 13. JavaのREGEX演算子の優先順位
- 14. PHP演算子の優先順位のバグ?
- 15. Perl5の=(等しい)演算子の優先順位
- 16. Zend Frameworkの選択演算子の優先順位
- 17. C言語での演算子の優先順位
- 18. Rubyの演算子の優先順位表
- 19. Javaでの3進演算子の優先順位と代入
- 20. 複数のブール条件 - 演算子の優先順位
- 21. Cでの演算子の優先順位
- 22. yacc - 演算子のないルールの優先順位?
- 23. 違い:演算子の優先順位と短絡が
- 24. 演算子の優先順位と結合性
- 25. ハスケルの優先順位:ラムダと演算子
- 26. オーバーロードされたキャスト演算子の優先順位
- 27. 演算子優先順位(boolより前のvoid *)
- 28. ラムダ微積分演算子の優先順位
- 29. Menhir/Ocamlyaccの演算子の動的優先順位と優先順位の指定
- 30. 優先順位:論理や三項演算子対
いいえ、それはPython言語自体の一部です。どのように言語が解析されるか – jdi
@jdiそれは答えです、それを一つにしてみませんか? – kojiro
@kojiro:正式なpythonのドキュメントへのリンクを見つけることができないので、それは変更できません。私はそれを述べているサードパーティのリンクのトンを見つけた。 – jdi