3
A
回答
6
tp_richcompare
类似于Python语言本身的丰富比较special methods。当在类上调用比较运算符时,优先选择tp_compare
。
当您希望更好地控制比较逻辑时,使用tp_richcompare
。例如,确定平等可能是一种非常便宜的方法,但不是优先。假设memcmp(a, b, sizeof(*a)) == 0
表示两个非常复杂的数据结构相等,但memcmp(a, b, sizeof(*a)) < 0
并不表示a
小于b
,而这需要一个昂贵的算法来确定。 tp_compare
功能需要您始终使用昂贵的算法才能返回-1
,0
或1
。 函数OTOH告诉您哪个比较是有意的,因此您可以根据需要选择昂贵的算法还是廉价的算法。
的tp_richcompare
另外一个优点是可以提高对操作没有意义,如u < v
例外情况u
和v
是空间中的点。
相关问题
- 1. F#模块扩展与类型扩展
- 2. 在Ruby中包含与扩展和可比较模块
- 3. 在Angular2中扩展模块TS类型
- 4. 扩展一个扩展类的模块
- 5. 模块#包含和模块#扩展和模块#前置比较讨论
- 6. 扩展模型类
- 7. 比较模型类型Laravel
- 8. 模块中的类是否可以使用扩展模块的类的属性?
- 9. VB中的类与模块的比较
- 10. Perl中的可扩展Markdown-like模块?
- 11. 泛型类型参数如何表示“扩展”可比较不“实现”?
- 12. 扩展一个java比较来比较特定的类实现它比较了
- 13. 扩展模块
- 14. 在模块中扩展类方法
- 15. 在不同模块中抽象类型的扩展
- 16. 在OCaml中公开模块扩展的私有类型
- 17. 错误:distutils扩展模块中的未知文件类型'.hpp'
- 18. Laravel中的可扩展模型
- 19. 比较扩展对象
- 20. 用java泛型和接口扩展可比较件
- 21. 的CakePHP中可容纳:模型“比较”是不是与模型“比较”相关
- 22. 扩展扩展类型
- 23. Ruby:一个扩展模块的类
- 24. 如何创建类型E Java列表扩展可比较<? super E>
- 25. Fortran扩展类型在不同模块中
- 26. Autodesk forge中的FBX扩展模块中的3D模型的纹理不可见
- 27. 在node.js中扩展模块
- 28. 扩展django.contrib.auth模块
- 29. 扩展Haskell模块
- 30. 扩展angularJS模块
+1,很好的解释! – 2010-05-19 14:24:15
谢谢,这很清楚。我是否认为如果我决定实施'tp_richcompare',我还应该实现'tp_compare'来支持内置的'cmp'功能? – 2010-05-19 14:27:27
@詹姆斯:好问题;我真的不知道。我会冒险猜测'cmp'没有利用丰富的比较函数,因为它太笨拙了,特别是因为没有假设富比较之间的关系('<'不必与'> ='相反) )。 – 2010-05-19 14:42:32