信息发布→ 登录 注册 退出

python3.5中cmp怎么用

发布时间:2025-12-09

点击量:
Python 3.5 中 cmp() 函数已被彻底移除,应使用比较运算符或 functools.cmp_to_key() 替代;自定义排序优先用 key 参数,类比较需实现 lt__、__eq 等富比较方法。

python3.5中cmp怎么用

Python 3.5 中 没有 cmp() 函数,它在 Python 3.0 就被彻底移除了。

官方明确说明:cmp() 函数应被视为“已消失”,__cmp__() 特殊方法也不再支持。

所以你不能直接写 cmp(a, b),会报错:

>>> cmp(1, 2)
NameError: name 'cmp' is not found

替代方案:用比较运算符或 functools.cmp_to_key

✅ 推荐方式:用 functools.cmp_to_key() 配合 sorted()list.sort()

如果你原本想用 cmp 做自定义排序(比如按绝对值、按字符串长度、按多条件),现在要改写成「返回布尔逻辑」的 key 函数,或用 cmp_to_key 包装旧式比较逻辑。

立即学习“Python免费学习笔记(深入)”;

例如,按绝对值升序排序:

Flex3组件和框架的生命周期 中文WORD版 Flex3组件和框架的生命周期 中文WORD版

在整本书中我们所涉及许多的Flex框架源码,但为了简洁,我们不总是显示所指的代码。当你阅读这本书时,要求你打开Flex Builder,或能够访问Flex3框架的源码,跟随着我们所讨论源码是怎么工作及为什么这样做。 如果你跟着阅读源码,请注意,我们经常跳过功能或者具体的代码,以便我们可以对应当前的主题。这样能防止我们远离当前的主题,主要是讲解代码的微妙之处。这并不是说那些代码的作用不重要,而是那些代码处理特别的案例,防止潜在的错误或在生命周期的后面来处理,只是我们当前没有讨论它。有需要的朋友可以下载看看

Flex3组件和框架的生命周期 中文WORD版 0 查看详情 Flex3组件和框架的生命周期 中文WORD版
from functools import cmp_to_key

def my_cmp(x, y):
    if abs(x) < abs(y):
        return -1
    elif abs(x) == abs(y):
        return 0
    else:
        return 1

nums = [-5, 3, -1, 4]
sorted_nums = sorted(nums, key=cmp_to_key(my_cmp))
print(sorted_nums)  # [-1, 3, 4, -5]

⚠️ 注意:你的 my_cmp 函数语义要和老 cmp() 一致 —— 返回 -1 / 0 / 1

✅ 更简洁的方式:优先用 key 参数(不用 cmp)

大多数场景其实不需要写比较函数,直接用 key 更清晰:

# 按长度排序字符串
words = ['hi', 'hello', 'a']
words.sort(key=len)  # ['a', 'hi', 'hello']

# 按第二项排序元组
pairs = [('x', 3), ('y', 1), ('z', 2)]
sorted_pairs = sorted(pairs, key=lambda x: x[1])  # [('y', 1), ('z', 2), ('x', 3)]

❌ 不要用 __cmp__ 方法

Python 3 已废弃 __cmp__。自定义类比较应实现富比较方法,如:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def __lt__(self, other):  # 支持 <
        return self.age < other.age

    def __eq__(self, other):  # 支持 ==
        return self.age == other.age

这样就能用于 sorted() min() 等函数。


补充:为什么删掉 cmp()

  • 容易混淆(返回 -1/0/1,而不是布尔值)
  • key 参数更直观、高效、可读性更强
  • 富比较方法(__lt__, __eq__ 等)让对象行为更明确、更符合直觉

基本上就这些。不复杂但容易忽略:Python 3 里真没 cmp(),别找它了,用 keycmp_to_key 就对了。

以上就是python3.5中cmp怎么用的详细内容,更多请关注其它相关文章!


相关文章: 极速漫画官方主页网址 极速漫画漫画在线浏览官网链接  在J*a中如何开发简易仓库管理与库存统计_仓库管理库存统计项目实战解析  TikTok搜索结果不显示如何解决 TikTok搜索刷新优化方法  深入理解字体排版:Adobe光学字偶距与CSS字偶距的差异与实现  Win11截图该按哪些键 Win11截屏完整流程解析【教程】  台积电1.4nm工艺A14瞄准2028:10年来性能提升80%  J*aScript map 方法中处理循环元素为空数组的策略  如何在复杂的电商平台中优雅地管理共享资源并确保正确重定向,使用spryker-shop/resource-share-page模块助你一臂之力  qq游戏手机版下载安装_qq游戏移动端入口  DLsite中文平台入口 DLsite官网内容在线查看  css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异  VS Code远程开发时如何处理文件权限问题  打开就能玩的植物大战僵尸 植物大战僵尸网页版传送门  Yandex官方入口网址 Yandex俄罗斯搜索引擎最新在线地址  Go调试环境为何无法启动_Go调试器启动失败原因与解决策略  Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】  ACG动漫视频网入口 ACG动漫*免费正版观看地址  Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接  Django表单验证失败时保留用户输入数据的最佳实践  c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学  电脑IP地址怎么查 查看本机IP地址的几种方法  J*aScript中高效管理与清空动态列表:避免循环陷阱  如何仅使用CSS更改登录界面背景图像图标的颜色  mysql如何分析事务日志_mysql事务日志分析方法  虚幻5科幻题材ARPG大作遭取消!本是《奇异人生》厂商新作  12306几点到几点不能订票? | 官方最新系统维护时间全解析  C++ vector二维数组定义_C++ vector of vector用法  MinIO大规模对象列表性能瓶颈深度解析与外部元数据管理策略  Win11怎么查看电脑配置_Win11硬件配置检测工具使用  QQ邮箱网页版邮箱入口 QQ邮箱官方登录平台  谷歌邮箱网页版官方页面入口 谷歌邮箱网页端快速访问  必由学官方平台入口 必由学在线课堂登录地址  漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端  qq邮箱发邮件给国外发不出去_QQ邮箱国际邮件发送失败原因与解决  蛙漫安全无毒 官方认证的绿色入口  漫蛙2漫画入口 漫蛙正版网页漫画直达网址  Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】  C++如何实现线程池_C++11手动实现一个简单的固定大小线程池  Vue.js 图片显示异常排查:理解应用挂载范围与DOM ID唯一性  想当下一个《2077》?《心之眼》Steam评价升至"多半好评"  小米14应用无法联网原因分析_小米14网络权限修复  我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口  我的世界官方游戏入口 我的世界官网平台直达链接  谷歌google账号怎么注册账号 谷歌账号注册官方流程  整合Supabase认证与Django模型:跨模式迁移的解决方案  如何在离线环境中使用Composer_Composer离线安装依赖包的技巧与策略  为什么我的微信朋友圈看不到别人的更新_微信朋友圈更新显示异常解决方法  UC浏览器如何安装插件 UC浏览器添加扩展程序详细教程【进阶】  2306选座时如何选靠窗位置_12306选座靠窗座位查看方法解析  微信怎么把收藏的内容分类管理 微信收藏内容标签分类方法 

在线客服
服务热线

服务热线

4008988990

微信咨询
二维码
返回顶部
×二维码

截屏,微信识别二维码

打开微信

微信号已复制,请打开微信添加咨询详情!