python3中為什麼取消了 cmp 方法?

時間 2021-06-04 10:57:42

1樓:ltoddy

有__eq__, __ne__, __lt__, __gt__等不麻煩的, 因為在functools庫中提供了乙個裝飾器:

total_ordering

你只需要實現 __eq__ 方法和其他任意乙個方法就可以了.

from

functools

import

total_ordering

@total_ordering

class

Point

:def

__init__

(self,x

,y):self.x

=xself.y

=ydef__eq__

(self

,other

):return

(self.x

,self.y

)==(other.x

,other.y

)def

__lt__

(self

,other

):return

(self.x

,self.y

)<(other.x

,other.y

)p1=Point(1

,4)p2

=Point(2

,3)for

exprin[

'p1 < p2'

,'p1 <= p2'

,'p1 == p2'

,'p1 >= p2'

,'p1 > p2'

]:print

(':'

.format

(expr

))result

=eval

(expr

)print

(' result of {}: {}'

.format

(expr

,result

))因為通過`__eq__`和其他任意乙個方法就可以推導出來了.

2樓:劉遙行

題主說的是 __cmp__

,如果說的是可複寫方法部分,sort()確實複雜了一些,但我實力有限,無法給出更加架構才層次的答案(答主比較弱)本回答主要針對 cmp 方法

在做遷移的也遇到這個問題,首先看 python2 中 cmp 完成的功能

cmp(x,

y)ifx

>y:

return

1elif

x

return-1

else

:return

0從實現來說(只看函式本身的功能),可以用以下語句替代((x > y) - (x < y))

參考:What's new in Python 3

3樓:copie

我也遇到了官方文件有說為什麼我總結了一下cmp取消後的應對方法https://

copie.cn/index.php/archives/Python3%E5%8F%96%E6%B6%88cmp%E7%9A%84%E6%9B%BF%E4%BB%A3%E6%96%B9%E6%B3%95-1.

html

python3 為什麼取消了sort方法中的cmp引數?

Paco 今天在研究遷移到python3看到這個問題,key函式實現起來跟python2的cmp差不多啊.In 79 ss Out 79 1,2,333,8,234,5923,7,49 In 80 sss sorted ss,key functools.cmp to key lambda a,b i...

C 如何呼叫python3?

關心細節的魔鬼 據說ironpython可以做到 但是visual studiof的python外掛程式居然不直接支援ironpython,很詭異 北海若 using System using System.Collections.Generic using System.Linq using Sy...

python3中賦值問題?

依雲 因為乙個被賦值的物件是名字,另乙個是物件的資料。名字變更不影響物件本身 只影響你引用它的方法 而物件的資料變更當然會影響到那個物件,而不管那個物件有幾個名字,你又是通過哪個名字找到它的。再說一遍,這個和物件可變不可變沒任何關係。你嘗試修改可變物件的資料,結果會是成功的。如果你把 dict 換成...