Python中的经典与丰富的比较

时间:2015-12-14 11:27:01

标签: python compare

我找到了以下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<ynot y<=x的不同之处,以及这两种陈述会在哪些设置下会产生不同的结果,甚至更少我们需要考虑到这一点。在Google搜索之后,我知道__lt____le__与丰富的比较有关,但就是这样。

1 个答案:

答案 0 :(得分:2)

  

我不知道x<ynot y<=x

的区别

事实并非如此。

问题是,如果x是未覆盖__lt__的类的实例,则x < y将失败(这就是if hasattr(x, '__lt__')的原因)。在这种情况下,它不会评估x < y,而是会尝试评估not y <= x