如何在Python 3中使用cmp()函数?

6 浏览
0 Comments

如何在Python 3中使用cmp()函数?

我无法在Python 3中使用cmp()命令。以下是代码:

a = [1,2,3]
b = [1,2,3]
c = cmp(a,b)
print (c)

我收到了错误提示:

Traceback (most recent call last):
  File "G:\Dropbox\Code\a = [1,2,3]", line 3, in 
    c = cmp(a,b)
 NameError: name 'cmp' is not defined

0
0 Comments

Python 3中的cmp()函数已经被废弃,这就导致了使用cmp()函数会出现一些问题。在需要比较两个数的大小时,可以使用math.copysign()函数来实现。下面是一个例子:

import math
ang = -2
# alternative for cmp(ang, 0):
math.copysign(1, ang)
# Result: -1

特别是当ang是np.float64类型时,上述方法是最安全的,因为 '-' 运算符已经被废弃了。下面是一个示例:

import numpy as np
def cmp_0(a, b):
    return (a > b) - (a < b)
ang = np.float64(-2)
cmp_0(ang, 0)
# Result:
# DeprecationWarning: numpy boolean subtract, the `-` operator, is deprecated,
# use the bitwise_xor, the `^` operator, or the logical_xor function instead.

在上述示例中,我们使用了一个自定义的cmp_0()函数来比较ang和0的大小。但是由于 '-' 运算符被废弃了,所以会出现一个警告。为了避免警告,可以使用以下方法:

def cmp_0(a, b):
    return bool(a > b) - bool(a < b)
ang = np.float64(-2)
cmp(ang, 0)
# Result: -1

上述方法可以正常工作,但是对于0的比较结果可能不准确。

0
0 Comments

在Python 3.x中,可以使用import operator并使用operator模块的eq()lt()等函数代替cmp()函数。

cmp()函数是Python 2.x中用于比较两个对象的函数。它接受两个参数,如果第一个参数小于第二个参数返回-1,如果第一个参数等于第二个参数返回0,如果第一个参数大于第二个参数返回1。然而,在Python 3.x中,cmp()函数被移除了。

如果希望在Python 3.x中实现与cmp()函数相同的功能,可以使用operator模块中的函数。operator模块提供了一系列用于执行各种操作的函数。其中,eq()函数用于比较两个对象是否相等,lt()函数用于比较第一个对象是否小于第二个对象。

要使用operator模块中的函数,需要先导入该模块。可以使用import operator语句导入operator模块。然后,可以使用operator.eq()函数比较两个对象是否相等,使用operator.lt()函数比较第一个对象是否小于第二个对象。

通过使用operator模块中的函数,可以在Python 3.x中实现与cmp()函数相同的功能。这样,就可以方便地比较两个对象的大小或相等性。

0
0 Comments

Python 3中没有cmp()函数。如果你真的需要它,你可以自己定义一个。下面的代码是从原始的“What's New In Python 3.0”中提取的:

def cmp(a, b):
    return (a > b) - (a < b) 

然而,真正需要使用cmp()函数的情况相对较少,你可能需要考虑一下是否它确实是你要做的事情的最佳方式。

也许需要像这样转换布尔值:

def cmp(a, b):
    return int(a > b) - int(a < b)

根据评论的建议,如果a和b是numpy变量,那么(a > b)和(a < b)变量可能是numpy.bool_类型。numpy.bool_类型不支持减法运算。使用bool(a > b) - bool(a < b)可以解决这个问题。

0