好好学Python:从零基础到项目实战
上QQ阅读APP看书,第一时间看更新

1.3 Python 3.9的新特性

最新的Python 3.9版本,有如下新特性:

1.为dict增加合并运算符

合并运算符(|)与更新运算符(|=)已经被加入内置的dict类,它们为现有的dict.update和{**d1,**d2}字典合并方法提供了补充。

2.新增用于移除前缀和后缀的字符串方法

增加了str.removeprefix(prefix)和str.removesuffix(suffix)用于方便地从字符串中移除不需要的前缀或后缀,还增加了bytes、bytearray以及collections.UserString的对应方法。

3.标准多项集中的类型标注泛型

在类型标注中可以使用内置多项集类型如list和dict作为通用类型而不必从typing导入对应的大写形式类型名(如List和Dict)。标准库中的其他一些类型现在同样也是通用的,如queue.Queue。

4.新的解析器

Python 3.9使用基于PEG的新解析器替代LL(1)。新解析器的性能与旧解析器大致相当,但PEG在设计新语言特性时的形式比LL(1)更灵活。

5.新增模块zoneinfo

zoneinfo模块为标准库引入了IANA时区数据库。它添加了zoneinfo.ZoneInfo,这是一个基于系统时区数据的实体datetime.tzinfo实现。

6.改进的ast模块

将indent选项添加到dump(),这允许它产生多行缩进的输出。添加了ast.unparse()作为ast模块中的一个函数,它可被用来反解析ast.AST对象并产生相应的代码字符串,当它被解析时将会产生一个等价的ast.AST对象。为AST节点添加了文档字符串,其中包含ASDL签名,可被用来构造对应的节点。

7.datetime

datetime.date的isocalendar()以及datetime.datetime的isocalendar()等方法现在将返回namedtuple()而不是tuple。

8.对math.gcd()函数进行了扩展以处理多个参数

在之前的版本中,它只支持两个参数。增加了math.lcm():返回指定参数的最小公倍数。增加了math.nextafter():返回从x往y方向的下一个浮点数值。增加了math.ulp():返回一个浮点数的最小有效比特位。

9.增加了新的random.Random.randbytes方法

该方法可生成随机字节串。

10.性能优化

相对于Python 3.8,3.9版本中的性能又有了一些提升,如对于匹配long的值执行速度现在加快了约1.87倍,使用UTF-8和ASCII编解码器解码短ASCII字符串现在加快了约15%。

11.弃用了部分命令

如distutils的bdist_msi命令现在已被弃用,改用bdist_wheel;parser和symbol模块已被弃用并将在未来的Python版本中移除;ast类Suite、Param、AugLoad和AugStore已被弃用并将在未来的Python版本中被移除;random.shuffle()的random形参已被弃用。

12.移除了部分命令

如unittest.mock.__version__上的错误版本已经被移除;array.array:tostring()和fromstring()方法已被移除,它们分别是tobytes()和frombytes()的别名,自Python 3.2起已被弃用;未写入文档的sys.callstats()函数已被移除;ElementTree模块中ElementTree和Element等类的getchildren()和getiterator()方法已被移除;json.loads()的encoding形参已被移除;typing.NamedTuple类的_field_types属性已被移除;html.parser.HTMLParser类的unescape()方法已被移除(它自Python 3.4起已被弃用),应当使用html.unescape()来将字符引用转换为对应的unicode字符。