I have overloaded some Python operators, arithmetic and boolean. The Python precedence rules remain in effect, which is unnatural for the overloaded operators, leading to lots of parentheses in expressions. Is there a way to "overload" Python's precedences?
5659 次
2 に答える
14
この方法でそのメカニズムをごまかすことができます:
- すべての演算子をオーバーライドして、計算を行わずに、何らかのオブジェクトにラップされた命令のリストを作成します。
- 独自のブラケット演算子を追加します (つまり、
_
関数として)。
例:
>>> a = MyNumber(5); b = MyNumber(2); c = MyNumber(3)
>>> a + b * c
MyExpression([MyNumber(5), '+', MyNumber(2), '*', MyNumber(3)])
ブラケット:
>>> a + _(b * c)
式を評価する関数であることに注意してください_
(強制するため)
したがって、優先順位を逆にすると、次のようになります。
>>> _(a + b * c)
MyNumber(21)
PS。Q
Django はand演算子で同様のトリックを行いF
ます。
于 2012-08-04T19:10:42.043 に答える
9
いいえ、Python 言語自体の一部です。それが言語の解析方法です。
公式見積もり:評価順
Python は式を左から右に評価します。代入を評価する際、右側が左側より先に評価されることに注意してください。
他の引用:
混合演算子を使用して数学演算を実行する場合、事前に決定された優先順位に基づいて、Python が最初に実行する演算を決定することに注意することが重要です。この優先順位は、ほとんどのプログラミング言語と同様の優先順位に従います。
Python はPEMDAS の操作順序に従っていることに注意してください。
于 2012-08-04T18:32:26.057 に答える