cmp()が役立つのはなぜですか?
これはあまり有用ではないため、非推奨になりました(cmp
組み込みのソートはなくなり、組み込みのソートはPython 3では受け入れられなくなりました)。豊富な比較方法がそれに取って代わりました:
object.__lt__(self, other)
object.__le__(self, other)
object.__eq__(self, other)
object.__ne__(self, other)
object.__gt__(self, other)
object.__ge__(self, other)
これにより、<
シンボル(および他のシンボル)をオーバーロードされた比較演算子にすることができ、たとえば、セットオブジェクトのサブセットおよびスーパーセットの比較が可能になります。
>>> set('abc') < set('cba')
False
>>> set('abc') <= set('cba')
True
>>> set('abc') == set('cba')
True
>>> set('abc') >= set('cba')
True
>>> set('abc') > set('cba')
False
上記を有効にすることはできcmp
ますが、次のことはできません。
>>> set('abc') == set('bcd')
False
>>> set('abc') >= set('bcd')
False
>>> set('abc') <= set('bcd')
False
おもちゃの使い方cmp
結果をインデックスとして使用する興味深い使用法を次に示します(最初の値が2番目の値よりも小さい場合は-1、等しい場合は0、より大きい場合は1を返します)。
def cmp_to_symbol(val, other_val):
'''returns the symbol representing the relationship between two values'''
return '=><'[cmp(val, other_val)]
>>> cmp_to_symbol(0, 1)
'<'
>>> cmp_to_symbol(1, 1)
'='
>>> cmp_to_symbol(1, 0)
'>'
ドキュメントによると、cmpは存在しないかのように扱う必要があります。
https://docs.python.org/3/whatsnew/3.0.html#ordering-comparisons
cmp
削除された同等の操作
ただし、これを同等のものとして使用できます。
(a > b) - (a < b)
私たちの小さなおもちゃの機能では、それはこれです:
def cmp_to_symbol(val, other_val):
'''returns the symbol representing the relationship between two values'''
return '=><'[(val > other_val) - (val < other_val)]