Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python 如何移除旧的版本特性,如何迎接新的特性?

Python 如何移除旧的版本特性,如何迎接新的特性?

作者头像
Python猫
发布于 2020-04-26 14:37:57
发布于 2020-04-26 14:37:57
8880
举报
文章被收录于专栏:Python无止境Python无止境

2020 年 4 月 20 日,Python 2 的最后一个版本 2.7.18 发布了,这意味着 Python 2 是真正的 EOL(end of life)了,一个时代终于落幕了。

Python 2.0 版本是在 2000 年发布的,至今正好到 20 周年(差半年),一代版本竟然持续了这么长时间。其中,2.7 版本是在 Python 3 推出后才发布的,它在 2010 年发布,至今已是 10 年之久。

事实上,Python 诞生了 30 年,但版本演进过程一直很慢,目前最新发布的版本只到 3.8.2。

对比一下相差几岁的隔壁家选手,C++ 已经发展到了 20,JAVA 发展到了 14 ,PHP 到了 7.4,差距悬殊。

但是,版本发布太频繁,也不总是一件好事。就在 Python 程序员抱怨自己的 Python 2 项目还没升 3 版本时,有些 JAVA 程序员还在维护 6、7 版本的项目呢。版本迁移之苦,大家彼此彼此,五十步笑百步。

编程语言跨版本间出现不兼容的特性,几乎是常态。很多时候,并不是说过去的设计是 bug,只是因为编程语言也是某种“生命体”,它会学习其它语言,也会自我进化,所以就有新陈代谢。

摆脱旧的不兼容性版本或者某些落后的设计,有时候需要挺漫长的过渡期。为了方便程序员迁移,核心开发者们形成了一些有效的惯例。

以 Python 为例,我知道有以下的几种策略:

1、DeprecationWarning 提示

当使用过期的类或方法时,会出现 DeprecationWarning 告警。

例如,从 collections 模块导入 ABC(Abstract Base Classes,即抽象基类)就是过期用法,会出现以下提示:

DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.9 it will stop working

从 3.3 版本起,正确的用法是from collections.abc import Iterable,直到 3.9 版本时,会取消过期提示,出现报错。

2、将模块改名,约定为私有

在 Python 中,以单下划线“_”开头命名的变量,会被约定为私有的。如果在一个模块中定义了私有变量,理论上它就不该被导出到其它模块使用。

这种命名方式也被推广到了标准模块上。例如,在 Python 的极早期版本中有一个thread 模块,后来到 1.5.1 版本,以 thread 为基础又推出一个更方便好用的threading 模块,也就是我们熟知的实现多线程的模块。

为了摆脱/屏蔽旧的实现,Python 把 thread 模块重命名为_thread ,约定为私有的,这种方式很灵活,普通程序员不会感知它的存在,骨灰级程序员却可以用它实现更加低层的开发。

3、文档中作 deprecated 提示

它跟 DeprecationWarning 是同样的意思。之所以要单独列出来,是因为在构思本文时,我正巧在 Python 3.8 文档中发现了一则提示,忍不住分享一下。

文档中说:@asyncio.coroutine 装饰器不再支持基于yield from 生成器实现的协程,需要显式地写成“asyc def”这种定义方式。

这意味着,3.8 版本对该特性来说就是个分界线,它将进入一个平稳的淘汰周期。

以上三种方式可谓是“除旧”,是面向过去的版本所做的。与它们相对应,就少不了“迎新”的过程,要面向未来的版本。

Python 中有时候会在当前版本中加入一些实验性的特性,期待在未来版本中再完全地实现。而这,就需要给程序员们指出一些过渡性的提示。

例如,在《Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型》一文中,我就介绍了隐藏在 3.8 版本中的“vectorcall”协议,它要在 3.9 版本中才会真正地实现(而且不排除在未来还会继续扩展)。

此外,还有一个很著名的例子:3.2 版本中推出的 concurrent.futures标准库(依据 PEP-3148)。

这是一个统合了多线程与多进程的异步开发库,“concurrent”指的是并发,而“并发”概念可以囊括多线程与多进程的实现方式。

为什么在“concurrent”下面要加一个“futures”呢?PEP-3148 中指出了这样命名的三点原因,其中最后一点是:希望在将来(in the future)能够添加和移动现有的跟并发相关的库到concurrent库下面。

也就是说,3.2 版本的concurrent.futures就是一种实验性的设计,它是为将来更好的concurrent库而作的准备。虽然说将来的最终实现,可能跟 PEP 中设想的不同,但是,这种面向将来的长远考虑的设计思路,会给整个社区带来某种预期和共同的信念。

好了,聊了这么多,是时候收个尾了。

我从未真正开发或维护过 Python 2 的项目,所以在这个本应纪念它 EOL 的日子,所能想到的就是一个更具普遍性的“除旧迎新”的话题:旧的版本特性是如何逐步退出的,新的版本特性又是如何逐步加入的?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python猫 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 3.7.0 正式版新特性解析
美国时间6月27日晚8点,Python 3.7.0 经过多轮测试,终于发布了正式版,增强了多处特性功能,同时 3.6 也更新到 3.6.6 稳定版本。
加米谷大数据
2018/07/25
5750
Python 3.7.0 正式版新特性解析
python3 生成均匀分布随机数_Python 3.9来了!这十个新特性值得关注
近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新、新的解析器、新的字符串函数等。
用户7886150
2021/01/28
9960
流畅的 Python 第二版(GPT 重译)(七)
面向对象编程关乎接口。在 Python 中理解类型的最佳方法是了解它提供的方法——即其接口——如 “类型由支持的操作定义”(第八章)中所讨论的。
ApacheCN_飞龙
2024/03/21
2500
流畅的 Python 第二版(GPT 重译)(七)
Python 3.10 明年发布,看看都有哪些新特性?
我们目前生活在Python 3.8的稳定时代,上周发布了Python的最新稳定版本3.8.4。Python 3.9已经处于其开发的beta阶段,并且2020年7月3日预发布了beta版本(3.9.0b4),第五版beta预定于明天发布。3.9的第一个稳定版本预计将在2020年10月发布。Python3.10的开发也将于2020年5月开始,并且第一个beta版本预计在2021年5月开始。
朱小五
2020/09/07
7000
Python 3.10 明年发布,看看都有哪些新特性?
Python 3.9 beta2 版本发布了,看看这 7 个新的 PEP 都是什么?
随着 Python 3.9.0b1 的发布,即开发周期中计划的四个 beta 版本的首个,Python 3.9 的功能已经是完善了。在 10 月发布最终版本之前,还会有许多测试和稳定性方面的工作要做。
Python猫
2020/06/16
5390
Python 3.7.0 版本正式发布,新特性来袭
Python 3.7.0版本已经于美国时间2018年6月27日发布,同时发布的也有Python 3.6.6版本,下面是来自Python官网的通知:
Python中文社区
2018/07/27
7000
Python 3.7.0 版本正式发布,新特性来袭
Python3.8 了解的差不多了吧,Python3.9 新特性了解一下!
原文有删改:https://docs.python.org/3.9/whatsnew/3.9.html
kbsc13
2019/10/24
1.8K0
关于Python3.9,这张「新特性必知图」就够了
为了更好地理解此次更新,Twitter上一位16岁少年Pratham Prasoon,还自制了一张「Python 3.9新特性必知图」。
Python知识大全
2020/10/23
1.2K0
关于Python3.9,这张「新特性必知图」就够了
Python 200个标准库汇总!
dummy_threading:threading模块的替代(当_thread不可用时)
double
2020/09/30
1.4K0
太爽了!Python3.9 的那些新特性
关于多进程库的改进,Python 3.9 向 multiprocessing.SimpleQueue 类添加了新方法 close()。 此方法可以显式地关闭队列。这将确保队列关闭并且停留时间不会比预期长。值得注意的是,一旦关闭队列,就不能调用 get()、put() 和 empty() 方法。
龙哥
2021/07/13
2.1K0
流畅的 Python 第二版(GPT 重译)(四)
Python 中的函数是一等对象。编程语言研究人员将“一等对象”定义为一个程序实体,可以:
ApacheCN_飞龙
2024/03/21
4710
流畅的 Python 第二版(GPT 重译)(四)
Python 3.12 新特性一览
近期官方发布了Python 3.12.0的稳定版本,Python 3.12.0 是 Python 编程语言的最新主要版本,它包含许多新功能和优化。
用户1278550
2023/10/24
1.1K0
Python 3.12 新特性一览
Python 3.8.0特性详解!!
那么,这次新发布的 Python 3.8.0 有哪些重要的改进呢?以下是是 Python 3.8 相比 3.7 的新增特性。
昱良
2019/10/21
6760
Python 3.8.0特性详解!!
Python 四大基本语法
分别从变量命名规则、缩进原则、特殊关键字和特殊运算符四个方面,总结 Python 的基本语法。
double
2020/02/24
7640
夯实Python基础(7)
Python标准库,是Python程序员应该熟悉了解的又一个宝库。Python 标准库非常庞大,所提供的组件涉及范围十分广泛。简要描述如下:
高一峰
2020/09/22
6230
Python 3.9来了!这十个新特性值得关注
Python 3.9 已于 10 月 5 日发布,新版本的特性,你 get 到了吗?对于 Python 程序员来说,这又是一个令人兴奋的时刻。
机器之心
2020/10/27
1.1K0
Python 3.9来了!这十个新特性值得关注
超全汇总!小白必看 Python 标准库介绍!!
​文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串准备工具 readline:GNU按行读取接口 rlcompleter:GNU按行读取的实现函数 二进制数据 struct:将字节解析为打包的二进制数据 codecs:注册表与基类的编解码器 数据类型 datetime:基于日期与时间工具 calendar:通用月份函数 collections:容器数据类型
码农向前冲
2021/12/28
8120
超全汇总!小白必看 Python 标准库介绍!!
如何写出清晰又优雅的Python代码?我们给你这26条建议
导读:Python Enhancement Proposal #8叫作PEP 8,它是一份针对Python代码格式而编订的风格指南。尽管只要语法正确,代码随便怎么写都行,但采用一致的风格可以使代码更易读、更易懂。如果你的代码风格和其他Python程序员的相同,那么就能够更加顺利地与大家一起做项目。
IT阅读排行榜
2021/05/06
1.1K0
流畅的 Python 第二版(GPT 重译)(十三)
类元编程是在运行时创建或自定义类的艺术。在 Python 中,类是一等对象,因此可以使用函数在任何时候创建一个新类,而无需使用 class 关键字。类装饰器也是函数,但设计用于检查、更改甚至替换装饰的类为另一个类。最后,元类是类元编程的最高级工具:它们让你创建具有特殊特性的全新类别的类,例如我们已经看到的抽象基类。
ApacheCN_飞龙
2024/03/21
2010
流畅的 Python 第二版(GPT 重译)(十三)
Python3.8 了解的差不多了吧,Python3.9 新特性了解一下!
原文有删改:https://docs.python.org/3.9/whatsnew/3.9.html
用户1564362
2019/10/31
1K0
相关推荐
Python 3.7.0 正式版新特性解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档