Python 3.9来了!这十个新特性值得关注

选自towardsdatascience
作者:Farhad Malik
机器之心编译
编辑:陈萍
近日 , Python 3.9 发布 , 并开发了一些新特性 , 包括字典合并与更新、新的解析器、新的字符串函数等 。
Python 3.9 已于 10 月 5 日发布 , 新版本的特性 , 你 get 到了吗?对于 Python 程序员来说 , 这又是一个令人兴奋的时刻 。
Python 3.9来了!这十个新特性值得关注文章插图
相比于之前的版本 , Python 3.9 有哪些值得讨论的功能呢?
简而言之 , 从字典更新 / 合并到添加新的字符串方法 , 再到 zoneinfo 库的引入 , Python 3.9 添加了许多新特性 。 此外 , 该版本还引入了一种稳定、高性能的新型解析器 。
标准库更新了许多新特性 , 并添加了新模块 zoneinfo 和 graphlib 。 此外该版本也对许多模块进行了改进 , 如 ast、asyncio、concurrent.futures、multiprocessing、xml 等 。
Python 3.9来了!这十个新特性值得关注文章插图
图源:
现在让我们一起探索 Python 3.9 的新特性 。
Python 3.9:10 个有趣的新特性
1. 字典更新和合并
字典添加两个新的运算符:「|」和「|=」 。 「|」运算符用于合并字典 , 「|=」运算符用于更新字典 。
字典合并:
字典更新:
2. 基于 PEG 的高性能解析器
Python 3.9 提出用高性能和稳定的基于 PEG 的解析器取代当前基于 LL(1) 的 Python 解析器 。
当前的 CPython 解析器基于 LL(1) , LL(1) 解析器是一个自顶向下的解析器 , 它从左到右解析输入 。
Python 3.9 提议将 LL(1) 替换为新的基于 PEG 的解析器 , 这意味着它将解除当前 LL(1) 语法对 Python 的限制 。 此外 , 当前的解析器修补了许多将要删除的 hack 。 因此 , 从长远来看 , 这会降低维护成本 。
3. 新型字符串函数:删除前缀和后缀
Python 3.9 将两个新函数添加到 str 对象:
第一个函数用于删除前缀:str.removeprefix(prefix)
第二个函数用于删除后缀:str.removesuffix(suffix)
4. 对内置泛型类型提供类型提示
Python 3.9 通过删除并行类型层次结构 , 使注释程序变得更加简单 。 Python 3.9 支持 typing 模块所有标准集合中的泛型语法 。
我们可以将 list 或 dict 直接作为列表和字典的类型注释 , 而不必依赖 typing.List 或者 typing.Dict 。 因此 , 代码现在看起来更加简洁 , 而且更容易理解和解释 。
5. DateTime 支持 IANA 时区
zoneinfo 模块被创建出来支持 IANA 时区数据库 。 对 IANA 时区数据库的支持已经添加到标准库中 。
IANA 时区通常称为 tz 或 zone info 。 存在许多具备不同搜索路径的 IANA 时区 , 用于为 date-time 对象指定 IANA 时区 。 例如 , 我们可以将对 datetime 对象设置搜索路径「Continent/City」来设置 tzinfo 。
如果传入一个无效的密钥 , 则会引发 zoneinfo.ZoneInfoNotFoundError 异常 。
6. concurrent.futures 优化
concurrent.futures.Executor.shutdown() 中添加了一个新参数 cancel_futures 。 此参数可以取消尚未执行的并发任务 。 在 Python 3.9 之前主进程只有在所有并发任务完成后才能关闭 executor 对象 。
新参数 cancel_futures 已被添加到 ThreadPoolExecutor 以及 ProcessPoolExecutor 。 它的工作方式是:当参数的值为 True 时 , 在调用 shutdown() 函数时取消所有待处理的任务 。
7. 异步编程和多进程优化
Python 3.9 对异步编程(asyncio)和多进程库进行了优化 。
2. 新增了 coroutines、shutdown_default_executor() 和 asyncio.to_thread()。 shutdown_default_executor 负责关闭默认 executor , asyncio.to_thread() 主要用于在一条单独的线程中运行 IO 密集型函数 , 以避免事件循环 。