根据文档和教程的说法,
cmp() returns -1 if x < y
和
cmp() returns 0 if x == y
和
cmp() returns 1 if x > y
该教程还说,
cmp()返回两个数字之差的符号
我不太明白两个数字的差异意味着什么。这不意味着当数字符号不相等时,它返回一个值吗?因为..。
cmp(80, 100) : -1 # both have positive sign.
cmp(180, 100) : 1 # both also have positive sign.
cmp(-80, 100) : -1
cmp(80, -100) : 1**注:本教程中的代码。
尽管我对符号差异感到困惑,但我真的想不出为什么当x< y时,我们需要一个内置函数来返回-1的值。
函数cmp( )不容易实现吗?Python为什么保留cmp( )函数,或者这个Python的cmp( )函数有什么隐藏的用法吗?
发布于 2014-10-22 19:09:43
为什么cmp( )是有用的?
它不是很有用,这就是为什么它被废弃了(内置的cmp已经消失了,并且内置分类不再接受Python3中的一个)。丰富比较法取代了它:
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')
Falsecmp玩具的使用
下面是一个有趣的用法,它将其结果用作索引(如果第一项小于第二项,则返回1,如果等于则为0,如果大于1,则返回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)]发布于 2013-03-21 19:56:15
我不太明白这两个数字的区别是什么意思。
这意味着:取差异,然后是差异的符号。例如,如果x和y是两个数字:
x < y => x - y < 0和函数返回-1。x == y => x - y == 0和函数返回0。x > y => x - y > 0和函数返回1。有关三方比较的更多信息,请参见维基百科。
发布于 2013-03-21 19:57:16
三值比较器在排序时非常有用。您不仅想知道两个元素是否相等,还想知道它们的相对顺序,以便知道如何重新排列它们以更接近排序列表。这就是为什么C (strcmp)和Perl (cmp)都有类似的操作(在那些情况下用于字符串,但这是相同的想法)。
https://stackoverflow.com/questions/15556813
复制相似问题