Gui*_*tre 11 python comparison-operators python-3.x
在Python3中,functools.total_ordering装饰器允许只重载__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)
Run Code Online (Sandbox Code Playgroud)
那是因为xor运算符本身不存在吗?
Mar*_*ers 16
该文件指出,你必须定义之一__lt__()
,__le__()
,__gt__()
,或__ge__()
,但只应该提供一个__eq__()
方法.
换句话说,该__eq__
方法是可选的.
该total_ordering
执行不要求你指定的__eq__
方法; 它仅测试为__lt__()
,__le__()
,__gt__()
,或__ge__()
方法.它提供了多达3种缺失的特殊方法,基于其中之一.
该__eq__
方法是可选的,因为基础object
对象为您定义了一个; 只有当两个实例是同一个对象时才被视为相等; ob1 == ob2
只有当ob1 is ob2
是True
.看do_richcompare()
功能object.c
; 记住==
代码中的运算符有比较指针.
归档时间: |
|
查看次数: |
3258 次 |
最近记录: |