怎麼理解Python的cmp to key函式?

時間 2021-05-31 10:29:13

1樓:

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

這個問題下面的答案提到了python3下應該使用cmp_to_key代替原來的cmp,並給出了原始碼以及詳細的解釋。

2樓:靈劍

舊的sort函式介面接受乙個類似於C的比較函式,根據兩個引數的大小不同返回正、負或者0。新版本改用了key引數,將每個元素對映到乙個key,然後用key的比較代替原來元素的比較,許多時候這樣更方便,但是真的需要舊的比較函式介面的時候怎麼辦呢?這就需要cmp_to_key了,它接受乙個比較函式,然後返回乙個函式物件,這個函式呼叫後會為每個元素構造乙個物件,這個返回物件作為key的時候,排序的結果,和使用比較函式是一樣的。

它相當於舊介面和新介面的轉換器。

什麼原理呢?其實很巧妙,Python物件的比較過程可以用__lt__等函式重寫,cmp_to_key的返回值也是乙個重寫了比較過程的物件,在呼叫自定義比較過程時會呼叫輸入的比較函式,從而實現了設計目標。

怎麼理解Python的類和物件?

睦碼農 可以用乙個簡單的方式理解。你喜歡妹子 當然如果你喜歡別的也屬於你的自由 那麼妹子就是乙個類。妹子有幾個基本屬性,比如身高,體重。這些是所有妹子都具備的屬性,身高和體重是多少不重要,但你知道肯定有這個屬性 妹子肯定有幾個基本的行為,比如吃飯,不管她吃四頓還是八頓,還是不吃。她肯定能幹吃飯這件事...

Python的return如何理解?

runner time return很好理解,就是你使用乙個function後要返回的值。需要注意的是 1.執行return後function便停止工作2.return返回的值應當通過賦予乙個變數,以使用。比如你定義了某個function f return的是x,但是你想引用這個x,得另起一行,寫y...

Python的Copy深度如何理解?

The difference between shallow and deep copying is only relevant for compound objects objects that contain other objects,like lists or class instances...