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