我找到了以下Python代码here:
def cmp_lt(x, y):
# Use __lt__ if available; otherwise, try __le__.
# In Py3.x, only __lt__ will be called.
return (x < y) if hasattr(x, '__lt__') else (not y <= x)
我真的不明白这个功能是做什么的。显然,我在这里遗漏了一些微妙之处,因为我不知道x<y
与not y<=x
的不同之处,以及这两种陈述会在哪些设置下会产生不同的结果,甚至更少我们需要考虑到这一点。在Google搜索之后,我知道__lt__
和__le__
与丰富的比较有关,但就是这样。
答案 0 :(得分:2)
我不知道
的区别x<y
与not y<=x
事实并非如此。
问题是,如果x
是未覆盖__lt__
的类的实例,则x < y
将失败(这就是if hasattr(x, '__lt__')
的原因)。在这种情况下,它不会评估x < y
,而是会尝试评估not y <= x
。