gpt4 book ai didi

python - 比较 itemgetter 对象

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:58 24 4
gpt4 key购买 nike

我注意到 operator.itemgetter 对象没有定义 __eq__,因此它们的比较默认为检查身份(is)。

当两个 itemgetter 实例的初始化参数列表比较相等时,将它们定义为相等有什么缺点吗?

这是此类比较的一个用例。假设您定义了一个已排序的数据结构,其构造函数需要一个键函数来定义排序。假设您要检查两个这样的数据结构是否具有相同的关键函数(例如,在 assert 语句中;或验证它们是否可以安全合并;等等)。

当两个关键函数是 itemgetter('id') 时,如果我们能肯定地回答这个问题就好了。但目前,itemgetter('id') == itemgetter('id') 的计算结果为 False

最佳答案

Niklas 的回答很聪明,但需要更强的条件,因为 itemgetter 可以接受多个参数

from collections import defaultdict
from operator import itemgetter
from itertools import count

def cmp_getters(ig1, ig2):
if any(not isinstance(x, itemgetter) for x in (ig1, ig2)):
return False
d1 = defaultdict(count().next)
d2 = defaultdict(count().next)
ig1(d1) # populate d1 as a sideeffect
ig2(d2) # populate d2 as a sideeffect
return d1==d2

一些测试用例

>>> cmp_getters(itemgetter('foo'), itemgetter('bar'))
False
>>> cmp_getters(itemgetter('foo'), itemgetter('bar','foo'))
False
>>> cmp_getters(itemgetter('foo','bar'), itemgetter('bar','foo'))
False
>>> cmp_getters(itemgetter('bar','foo'), itemgetter('bar','foo'))
True

关于python - 比较 itemgetter 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9970278/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com