Change operator precedence in Python

后端 未结 2 1153
猫巷女王i
猫巷女王i 2021-01-17 12:52

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 lo

相关标签:
2条回答
  • 2021-01-17 13:15

    You can cheat that mechanism in this way:

    1. Override all operators to not do the calculations but create list of instructions wrapped in some object.
    2. Add your own bracket operator (ie. as a _ function).

    Example:

    >>> a = MyNumber(5); b = MyNumber(2); c = MyNumber(3)
    >>> a + b * c
    MyExpression([MyNumber(5), '+', MyNumber(2), '*', MyNumber(3)])
    

    Brackets:

    >>> a + _(b * c)
    

    Note that _ is a function that evaluates expression (in order you enforce in it)

    So if you reverse priorites you will get:

    >>> _(a + b * c)
    MyNumber(21)
    

    PS. Django does similar trick with Q and F operators.

    0 讨论(0)
  • 2021-01-17 13:39

    No. It's part of the python language itself. Thats how the language parses.

    Official quote: Evaluation order

    Python evaluates expressions from left to right. Notice that while evaluating an assignment, the right-hand side is evaluated before the left-hand side.

    Other quotes:

    Python:Basics:Numbers and operators

    When performing mathematical operations with mixed operators, it is important to note that Python determines which operations to perform first, based on a pre-determined precedence. This precedence follows a similar precedence to most programming languages.

    Python Programming/Operators

    Note that Python adheres to the PEMDAS order of operations.

    0 讨论(0)
提交回复
热议问题