我已经重载了一些Python运算符,算术和布尔值。 Python优先级规则仍然有效,对于重载的运算符来说这是不自然的,导致表达式中有许多括号。有没有办法“超载”Python的优先级?
答案 0 :(得分:8)
没有。它是python语言本身的一部分。那就是语言如何解析。
官方报价:Evaluation order
Python从左到右评估表达式。请注意,虽然 评估一项任务,在评估之前对右侧进行评估 左手边。
其他报价:
Python:Basics:Numbers and operators
当使用混合运算符执行数学运算时,它是 重要的是要注意Python确定要执行哪些操作 首先,基于预先确定的优先级。这个优先顺序如下 与大多数编程语言类似的优先级。
请注意,Python遵守PEMDAS order of operations。
答案 1 :(得分:8)
你可以用这种方式欺骗这种机制:
_
函数)。示例:
>>> 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。 Django使用Q
和F
运算符执行类似的操作。