是否有关于__cmp__如何在Python 2中为dict对象工作的描述?

我一直在尝试使dict继承自UserDict.DictMixin支持非哈希键的子类。性能不是问题。不幸的是,Python DictMixin通过尝试从子类创建dict对象来实现其中的某些功能。我可以自己实现这些功能,但是我仍然坚持__cmp__

我找不到__cmp__对dict类内置的逻辑的简要描述。


蝴蝶刀刀
浏览 500回答 3
3回答

万千封印

如果您要问比较字典的工作方式,是这样的:要比较字典A和B,首先比较它们的长度。如果它们不相等,则返回cmp(len(A),len(B))。接下来,找到A中的密钥adiff,这是为其的最小密钥adiff not in B or A[adiff] != B[adiff]。(如果没有这样的键,则字典是相等的。)还要找到B中最小的键bdiff bdiff not in A or A[bdiff] != B[bdiff]。如果adiff!= bdiff,则返回cmp(adiff,bdiff)。否则返回cmp(A [adiff],B [bdiff])。用伪代码:def smallest_diff_key(A, B):    """return the smallest key adiff in A such that adiff not in B or A[adiff] != B[bdiff]"""    diff_keys = [k for k in A if k not in B or A[k] != B[k]]    return min(diff_keys)def dict_cmp(A, B):    if len(A) != len(B):        return cmp(len(A), len(B))    try:        adiff = smallest_diff_key(A, B)    except ValueError:        # No difference.        return 0    bdiff = smallest_diff_key(B, A)    if adiff != bdiff:        return cmp(adiff, bdiff)    return cmp(A[adiff], b[bdiff])这是从dictobject.c中的2.6.3实现翻译而来的。

qq_遁去的一_1

还有的描述__cmp__ 在这里,但我觉得需要注意的重要一点是,__cmp__如果“富比”的方法,如仅使用__lt__和__eq__没有定义。此外,在Python3中,__cmp__该语言已被删除。因此,也许__cmp__完全避开而只是定义__lt__和__eq__。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python