12

我已经重载了一些 Python 运算符、算术和布尔值。Python 优先规则仍然有效,这对于重载的运算符是不自然的,导致表达式中出现大量括号。有没有办法“重载” Python 的优先级?

4

2 回答 2

14

您可以通过以下方式欺骗该机制:

  1. 覆盖所有运算符以不进行计算,而是创建包含在某个对象中的指令列表。
  2. 添加您自己的括号运算符(即作为_函数)。

例子:

>>> 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。QDjango 使用and运算符做类似的技巧F

于 2012-08-04T19:10:42.043 回答
9

不,它是 python 语言本身的一部分。这就是语言解析的方式。

官方报价:评估订单

Python 从左到右计算表达式。请注意,在评估分配时,右侧先于左侧评估。

其他报价:

Python:基础:数字和运算符

在使用混合运算符执行数学运算时,请务必注意 Python 根据预先确定的优先级确定首先执行哪些运算。此优先级遵循与大多数编程语言类似的优先级。

Python 编程/操作员

请注意,Python 遵循PEMDAS 操作顺序

于 2012-08-04T18:32:26.057 回答