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