【发布时间】:2013-04-20 17:44:10
【问题描述】:
在 Python3 中,functools.total_ordering decorator 只允许重载 __lt__ 和 __eq__ 以获取所有 6 个比较运算符。
我不明白为什么在一个就足够的情况下必须编写两个运算符,即__le__ 或__ge__,而所有其他运算符都会相应地定义:
a < b <=> not (b <= a)
a > b <=> not (a <= b)
a == b <=> (a <= b) and (b <= a)
a != b <=> (a <= b) xor (b <= a)
这仅仅是因为 xor 运算符本身不存在吗?
【问题讨论】:
-
xor本身确实存在。 -
@MartijnPieters 只能按位异或,不是吗?
-
按位异或是用于所有意图和目的的布尔异或,无论是在 Python 中还是在许多其他语言中。在 Python 中,
bool是int、False == 0和True == 1的子类。所以True ^ False等等工作就好了。
标签: python python-3.x comparison-operators