【发布时间】:2012-04-15 18:00:26
【问题描述】:
我注意到 operator.itemgetter 对象没有定义 __eq__,因此它们的比较默认为检查身份 (is)。
当两个itemgetter 实例的初始化参数列表比较相等时,将它们定义为相等有什么缺点吗?
这是这种比较的一个用例。假设您定义了一个排序的数据结构,其构造函数需要一个键函数来定义排序。假设您要检查两个这样的数据结构是否具有相同的关键功能(例如,在 assert 语句中;或验证它们是否可以安全合并;等等)。
如果我们能在两个关键函数是itemgetter('id') 时肯定地回答这个问题,那就太好了。但目前,itemgetter('id') == itemgetter('id') 将评估为 False。
【问题讨论】:
-
我看不出这会有什么帮助...也就是说,看到
itemgetter是在 C 中定义的,您可以将一个覆盖__getitem__的类组合在一起,然后运行这两个getter 以检查是否访问了相同的项目。这不是一个优雅或快速的解决方案,但我看不出你可以做得更好。 -
@NiklasB。我更新了这个问题以提供动机。
-
在这种情况下我会使用
lambda表达式。 -
@NiklasB。我不这么认为,Python中的很多内置函数都接受key作为函数,如果新的
key参数也是函数就更容易理解了。 -
@Satoru:我不明白你的意思。
标签: python python-3.x operators