Python类含双下划线函数报错:Undefined name 'cmp' 如何修正?
解决Python3中“Undefined name 'cmp'”报错的方法
问题根源
cmp是Python 2的内置比较函数,Python 3已移除该函数,所以在Python 3环境(Spyder默认一般为Python3)运行遗留代码会触发这个错误。
修正方案
根据代码中cmp的使用场景,选择对应方法:
场景1:cmp作为参数传入排序类函数(如sorted()、list.sort())
比如原代码类似:
sorted_list = sorted(my_list, cmp=my_compare_func)
需要借助functools模块的cmp_to_key工具,将老式比较函数转换为Python3支持的key函数:
- 先导入模块:
import functools
- 修改排序代码:
sorted_list = sorted(my_list, key=functools.cmp_to_key(my_compare_func))
场景2:直接调用cmp(a, b)获取比较结果
可以自己实现一个替代cmp的函数,放在代码开头:
def cmp(a, b): # 模拟Python2中cmp的行为:a>b返回1,a==b返回0,a<b返回-1 return (a > b) - (a < b)
之后代码中调用cmp(a,b)就可以正常运行。
内容的提问来源于stack exchange,提问作者tunar
相关产品推荐
相关产品推荐

