我注意到operator.itemgetter
对象没有定义__eq__
,所以它们的比较默认为检查标识(is
)。比较itemgetter对象
将两个itemgetter
实例定义为平等,每当它们的初始化参数列表比较为相等时,是否有任何缺点?
下面是这种比较的一个用例。假设您定义了一个有序的数据结构,其构造函数需要一个键函数来定义排序。假设您想检查两个这样的数据结构是否具有相同的键功能(例如,在assert
语句中;或者验证它们是否可以安全合并等)。
这将是很好,如果我们可以肯定地回答这个问题,当两个关键功能是itemgetter('id')
。但目前,itemgetter('id') == itemgetter('id')
将评估为False
。
我看不出这将是有益的...这说,看到'itemgetter'是在C中定义的,你可以共同攻击一个类来覆盖'__getitem__',然后运行这两个getter来检查是否访问了同一个项目。这不是一个优雅或快速的解决方案,但我看不出如何做得更好。 – 2012-04-02 02:45:38
@NiklasB。我更新了这个问题,为此提供了动力。 – max 2012-04-02 02:53:06
在这种情况下,我会使用'lambda'表达式。 – satoru 2012-04-02 02:56:34