来源:Python 技术「ID: pythonall」 Python 3.9 在经历了将近一年的试用期后,于 10月5日(2020年)发布了稳定版,意味着,在下一版本发布之前,不会在做改动,童鞋们可以放心大胆地更新了。享受完惬意的十一长假后,我们快来看看新版本带来了哪些惊喜 先附上一个 16 岁印度小哥哥整理的特性图: 节能篇这次版本最喜人的特性事节能,不仅节省电能,更重要的是节省了敲代码的次数,以及我们宝贵的时间 字典的合并与更新毫无疑问,字典对象(Dict)是日常编程中最常用到的数据结构,从存储键值对到支持复杂算法,都依赖于字典对象,而且常用一些字段的合并、更新等操作,虽然 Python 中已经提供了字段更新的方法和字典展开操作符( ** ),但是仍然不够简洁,我理解,在你看到新版本中的更新之前,不会感觉有什么不简洁的 原来的合并: d1 = {'a': 'A', 'b': 'B', 'c': 'C'} 现在的合并: d1 = {'a': 'A', 'b': 'B', 'c': 'C'}
是不是简洁多了,不仅简洁了,而且更容易理解了 这还没完,合并赋值操作符( 先看一段代码: d1 = {'a': 'A', 'b': 'B', 'c': 'C'}
如果遇到这种特殊的场景,合并运算简直太方便了,你能想到有哪些类似场景吗?欢迎留言 拓扑排序首先需要理解什么是拓扑图,简单来说就是一定空间内若干个点之间的关系,例如对于一项工作来说,包含有若干个任务,任务之间有相互依赖的关系,任务加上它们之间的关系,就构成了一个拓扑结构图 拓扑排序,就是对一个拓扑图中的点按照点之间的相互关系的一种排序 例如这样一个拓扑图 拓扑排序为 1、2、3、4、5 如果用算法生写的话,需要十行以上,而且还不包括调试时间,以及为各种适应性做的改善所花的时间 现在,排序只需要一行代码: from graphlib import TopologicalSorter
实际上最核心的就是创建排序对象的代码,新特性提供了优雅的封装 说到封装,你可能猜到他的功能并不单一,确实,排序组件 TopologicalSorter 不仅能对以及定义的结果排序,还可以对动态结构排序,例如 from graphlib import TopologicalSorter 也就是说,可以逐步的将依赖添加进去,在迭代处理的情况下很方便, 需要注意的是 另外,如果拓扑图结构是个循环的,排序会报 随机字节码之前要产生随机字节码,需要先产生随机数,然后从定义的字符序列中获取对应位置的字符,最好再转换为字节,是挺麻烦的,现在,一行代码搞定 import random 最小公倍数之前的 Python 版本中已经实现了最大公约数的计算,虽然可以用最大公约数求得最小公倍数,不过需要写多行代码(实际上我不记得怎么推送了) 现在,一行代码搞定: import math 是不是方便多了,不信的话,和下面生算对比下: def lcm(num1, num2): 功能篇功能方面,Python 3.9 也做出了很多改善,下面来了解下 字符串去前缀后缀本来字符串在 Python 中的操作已经够强大了,很难想到它会把去前后缀的功能作为更新,先看看效果吧
很简单,很容易想到用其他方式实现,代码也不会多,例如用 字符串的 "three cool features in Python".strip(" Python") 很明显,最终的效果并不是我们想要的, 如果用其他方式,比如字符串查找,正则匹配等,也能实现,不过没有现成的方法方便,更重要的是,这个特性避免了自己不小心的犯错 时区支持对我们中国来说,时区问题不大,特别是只做在国内使用的应用的话,但是如果在每个,或者其他地方,时区会是个问题,之前,可以通过将时间转换为 UTC 格式再转为其他时区的时间,现在可以方便的用 zoneinfo 模块为标准库引入了 IANA 时区数据库 from zoneinfo import ZoneInfo 如代码所示,可以为本地时间设置时区,将时间转化为指定时区的时间 注意:使用 ZoneInfo 获取时区属性之前,需要安装 tzdata 模块 其他数据类型提示Python 本身是弱类型语言,但在一些大型项目中容易因为数据类型引入 bug,为了改善这一点,对声明了数据类型的形参,如果实参与形参类型不符,执行时会得到警告提醒,例如 def fun(input: str): 更强悍的解析器Python 3.9 重构了解析器,虽然在日常编程中几乎感觉不到,但这个更新确是最重要的,就行如果你感觉如履平地,必然有人在默默付出一样 Python 之前一直使用 LL(1) 解析器将源代码解析为解析树,类似于一次读取一个字符,并解释源代码而无需回溯的解析器。 新解释器是基于 PEG(parsing expression grammar) 实现的,既高效,又灵活,不过需要使用更多的内存 import()特性修改
反正我没遇到过,可能是没有用过这种高级用法,就当是学习了 总结“人生苦短,用我 Python” —— Python 不但这么说,也这么做,当我们享受惬意的双节长假时,Python 默默的优化自己,只能让我们苦短的人生,更加精彩 还等什么,赶紧升级到 Python3.9 试试吧 参考
|
|