首页 » 网站推广 » php封闭版本技巧_Python 若何移除旧的版本特点若何迎接新的特点

php封闭版本技巧_Python 若何移除旧的版本特点若何迎接新的特点

访客 2024-12-11 0

扫一扫用手机浏览

文章目录 [+]

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

Python 2 主要版本

php封闭版本技巧_Python 若何移除旧的版本特点若何迎接新的特点

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

php封闭版本技巧_Python 若何移除旧的版本特点若何迎接新的特点
(图片来自网络侵删)

比拟一下相差几岁的隔壁家选手,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 提示

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 ,约定为私有的,这种办法很灵巧,普通程序员不会感知它的存在,骨灰级程序员却可以用它实现更加低层的开拓。

_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 的日子,所能想到的便是一个更具普遍性的“除旧迎新”的话题:旧的版本特性是如何逐步退出的,新的版本特性又是如何逐步加入的?

如果你喜好这种风格的文章,欢迎搜索关注"大众年夜众号“Python猫”。
人生苦短,让我们一起用 Python!

推举阅读:

本文首发地址:https://mp.weixin.qq.com/s/PIhtEIzBgy_ujcTeAQ2dxg

1、Python 3.9 性能优化,更快的 list()、dict() 和 range() 等内置类型:https://mp.weixin.qq.com/s/bjQjVmf7dP5fOqCS1cObqQ

2、PEP-3148:https://www.python.org/dev/peps/pep-3148

3、聊聊 Python 的内置电池:https://mp.weixin.qq.com/s/XzCqoCvcpFJt4A-E4WMqaA

4、聊聊 print 的前世今生:https://mp.weixin.qq.com/s/NuzfuH_zCZzcrmSFR04NHw

标签:

相关文章

webphp术语技巧_解析计算机黑客术语

3.网页木马:表面上伪装成普通的网页文件或是将而已的代码直接插入到正常的网页文件中,当有人访问时,网页木马就会利用对方系统或者浏览...

网站推广 2024-12-13 阅读0 评论0

php对象置空技巧_PHP 面向对象

在现实天下里我们所面对的事情都是工具,如打算机、电视机、自行车等。工具的紧张三个特性:工具的行为:可以对 工具施加那些操作,开灯,...

网站推广 2024-12-13 阅读0 评论0