2021 年 10 月 4 号,Python 官方正式发布了 Python3.10.0(https://www.python.org/downloads/release/python-3100/)。当时在忙着大数据相关的工作就没有写文章聊聊这个版本。就以这篇文章来简单聊聊。
与我预想的不一样,这一次 Python 没有发布 4.0,而是 3.10 这个版本号,这也意味着 3.10 版本不会有太大的改动,更多的是在原先版本上做新特性的增加或者是 bug 修复。至于为什么没有 Python4.0 ,在 InfoQ 的这篇文章《Python 之父:Python 4.0 可能不会有了》给出了解释:
Python 4,在这个问题上,无论是什么时候,只要核心开发团队一提到它,基本只是当做一个玩笑…… 我们已经从 Python 3 和 Python 2 中学到很多东西,因此,在严肃的意义上,谈论 Python 4 几乎是一个禁忌。
从 Python2 到 Python3 是一个非常痛苦的转变,虽然基本思想和语法特性没有发生太大的变化,但是在很多的细节上发生了太多的改变,比如print
语法,还有一些日常经常的用法也发生了微妙的变化。编程语言作为一个软件架构的底层,决定了编程语言是不能经常发生变化的,编程语言的版本号的变化都可能直接影响到上层应用的稳定性。因此,即使是 Python2 进入了“死亡”状态,像很多公司的底层操作系统的默认语言依然是 Python2。除此之外,还有好多基于 Python2 的框架和组件,也要兼容新的版本 Python3。
可能 Python2 到 Python3 的过程让 Python 团队对于 Python4.0 的发布有了很大的犹豫和分歧。所以这一次的 Python 发布的版本号就是 3.10 了。
也许 Python4 的发布要等到 Python 团队成功解决沉疴已久的 GIL 问题了。
我可以想象到,在某个时候,我们被迫放弃某些二进制或 API 与 C 扩展的兼容性…… 如果不改变语言本身,C 扩展就会有明显的不兼容性;如果我们能摆脱 GIL(global interpreter lock,全局解释器锁);如果其中一种或两种出现,我们可能会被迫调用 4.0,因为 C 扩展层面的兼容性问题。
回到 Python3.10,相比于 Python 的新版本发布时间的不稳定性,自从 Python 3.8 开始,Python 就保持着每年一个新的版本发布速度了。不过这几个版本对于语法特性没有太大的改动,更多的是关注于性能,还有就是“可选的静态类型”,这也符合Python团队之前的预告。
- Python 之父 van Rossum 披露了“Shannon Plan”项目,承诺 4 年把 Python 速度提升 5 倍。并且在 Python 3.11 版本,实现 Python 速度提高 2 倍的目标。--《Python 之父:让 Python 速度快 2 倍》
- 你可能已经注意到,在过去的六、七年中,我们一直在向 Python 添加可选的静态类型,也被称为渐进类型。--《Python 之父:Python 4.0 可能不会有了》
Python3.10 发布的新特性中,与语法有关的可能是类似于 Scala 语言里的“模式匹配”。我个人是很喜欢 Scala 里的模式匹配,非常简洁有力,在 Python 要实现相关的逻辑需要不断的写 if
与 elif
语句。现在有了match
和case
,这块就灵活和漂亮多了。比如:
command = input()
match command.split():
case ["quit"]:
quit()
case ["load", filename]:
load_from(filename)
case ["save", filename]:
save_to(filename)
case _:
print (f"Command '{command}' not understood")
我觉得是符合 Python 之禅里的“简单胜过复杂,明确优于隐晦”。
除了这个特性外,Python3.10 就没有太大的可提的东西了,更多的都类似于“新的 Union Type 表达”、“带括号的上下文管理器”,锦上添花,不影响现有的功能。
按照我们团队目前的生产环境和紧迫性,我是不会选择将现有的 Python3.7 的版本升级为 Python3.10 的。毕竟升级并没有带来太大的改变,甚至会引入不稳定性。