选自towardsdatascience

作者:Farhad Malik

机器之心编译

编辑:陈萍

近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新、新的解析器、新的字符串函数等。

Python 3.9 已于 10 月 5 日发布,新版本的特性,你 get 到了吗?对于 Python 程序员来说,这又是一个令人兴奋的时刻。

相比于之前的版本,Python 3.9 有哪些值得讨论的功能呢?

简而言之,从字典更新 / 合并到添加新的字符串方法,再到 zoneinfo 库的引入,Python 3.9 添加了许多新特性。此外,该版本还引入了一种稳定、高性能的新型解析器。

标准库更新了许多新特性,并添加了新模块 zoneinfo 和 graphlib。此外该版本也对许多模块进行了改进,如 ast、asyncio、concurrent.futures、multiprocessing、xml 等。

图源:https://twitter.com/PrasoonPratham/status/1313392420038483968

现在让我们一起探索 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 密集型函数,以避免事件循环。

关于多进程库的改进,Python 3.9 向 multiprocessing.SimpleQueue 类添加了新方法 close()。

此方法可以显式地关闭队列。这将确保队列关闭并且停留时间不会比预期长。值得注意的是,一旦关闭队列,就不能调用 get()、put() 和 empty() 方法。

8. 统一的软件包导入错误

Python3.9 之前的版本在导入 Python 库时存在的主要问题是:当相对导入超出其顶级包时,Python 中的导入行为不一致。

builtins.__import__() 引发 ValueError,而 importlib.__import__() 引发 ImportError。Python3.9 版本进行了修复,它将统一引发 ImportError。

9. 生成随机字节

Python 3.9 版本中添加了新的函数 random.Random.randbytes()。该函数可用于生成随机字节。

Python 支持生成随机数,但如果需要生成随机字节呢?在 Python3.9 版本之前,开发人员必须想方设法生成随机字节。尽管他们可以使用 os.getrandom()、os.urandom() 或者 secrets.token_bytes() 来生成随机字节,但这些方法无法生成伪随机模式。

为了确保随机数的产生符合预期行为,并且过程可复现,开发人员通常将种子(seed)与 random.Random 模块一起使用。因此,Python 3.9 添加了 random.Random.randbytes() 方法,以可控的方式生成随机字节。

10. 修复字符串替换函数

在 Python 3.9 版本之前,对于所有非零的 n,"".replace("",s,n) 返回空字符串而不是 s。这个错误使用户困惑,并导致应用程序的不一致行为。

Python 3.9 修复了该问题,不管 n 是否为 0,其结果都与 "".replace("", s) 一致。

如果大家想深入了解更多细节,请查阅官方文档:https://docs.python.org/zh-cn/3.9/whatsnew/3.9.html

爬取UP主弹幕与评论,进行广告投放分析。

10月14日,AWS解决方案架构师贺浏璐将带来一场live coding,演示如何利用AWS云服务构建一个简单的数据管道从爬取、处理到分析视频内容。

python 3.9特性_Python 3.9来了!这十个新特性值得关注相关推荐

  1. python 3.9性能_Python 3.9来了!这十个新特性值得关注

    选自towardsdatascience 作者:Farhad Malik 机器之心编译 编辑:陈萍 近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新.新的解析器.新的字符串函数 ...

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

    选自towardsdatascience 作者:Farhad Malik 机器之心编译 编辑:陈萍 近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新.新的解析器.新的字符串函数 ...

  3. java9特性_96.java基础10(java9/10/11新特性)

    126.java 9 新特性1(模块化功能): 1.java模块化 2.java 交互式环境jshell 3.泛型 package com.atguigu.java; import org.junit ...

  4. java8新特性Lambda和Stream以及函数式接口等新特性介绍

    主要内容 1.Lambda 表达式 2.函数式接口 3.方法引用与构造器引用 4.Stream API 5.接口中的默认方法与静态方法 6.新时间日期API 7.其他新特性 Java 8新特性简介 速 ...

  5. IntelliJ IDEA 使用 Java 11新特性以及Java 8 以来的Java 11新特性介绍

    文章目录 Java 11 安装 IDEA 设置 特性1:lambda表达式中允许使用var 特性2: String新增REPEAT 方法,方便拷贝字符串 特性3: 文件读写更方便:readString ...

  6. html5新特性 移除哪些,html5\CSS3有哪些新特性、移除了哪些元素?如何处理HTML5新标签的浏览器兼容问题?如何区分HTML和HTML5?...

    (1)HTML5现在已经不是SGML的子集,主要是关于图像,位置,存储,地理定位等功能的增加. 绘画canvas元素: 用于媒介回放的video和audio元素: 本地离线存储localStorage ...

  7. Spring版本特性:Spring各个版本引入了哪些新特性?

    Spring是Rod Johnson在2004年推出的一个轻量级框架.对Java EE 系统框架臃肿.低效.脱离现实的种种现状提出了质疑,并积极寻求探索革新之道. spring 1.x时代 在这个时代 ...

  8. java 1.7的新特性_[Java]  JDK 1.7版本的 新特性

    在网上看到一些jdk1.7的新特性,现将我觉得比较实用的记录于下: (1)switch中可以使用字串了 String s = "test"; switch (s) { case & ...

  9. HTML5十个新特性

    (一)  语义标签 (二)增强型表单 (三)视频和音频 (四)Canvas绘图 (五)SVG绘图 (六)地理定位 (七)拖放API (八) WebWorker (九) WebStorage (十)We ...

最新文章

  1. 祈澈菇凉的高端知识资源分享星球开通
  2. NumPy复制数组之浅拷贝和深拷贝(注意,直接用等号不是复制,且切片会改变原数组!!!)ndarray.copy() ndarray.view()(view()只是改变shape形状,数据还是同一个)
  3. 剑指offer——不能被继承的类
  4. Java将mysql输出csv_使用Java将大量数据从数据库导出到.csv时出...
  5. 吴恩达《机器学习》课程总结(8)_神经网络参数的反向传播算法
  6. 优先级队列之PriorityQueue
  7. 《计算机网络 第七版》读后感
  8. 三角矩阵的逆矩阵怎么求_「线性代数」求可逆矩阵P,使得相似矩阵对角化
  9. 等待其他线程执行完后执行(CountDownLatch)
  10. 【正本清源】算力大战根本就从未开始过!BCH分叉事件之技术细节七问
  11. 【帝国CMS】灵动标签SQL调用广告系统里的广告
  12. 解决苹果手机滑动卡顿
  13. 写给刚接触Auto CAD新人的建议——第三期
  14. 如何识破钓鱼邮件攻击
  15. 人工智能时代:软件中的人工智能将如何改变程序员的角色
  16. ContentObserver去实现拒收短信或短信黑名单等功能
  17. 小米电视如何安装第三方软件观看有线电视?看我如何操作
  18. vim 删除所有空行
  19. 一花一树一城,走进三维重建的绚丽世界|专访权龙...
  20. 内网计算机病毒如何查杀,Windows7如何查杀ARP病毒?

热门文章

  1. oracle 数据库中拆分,oracle数据库字符串拆分
  2. 用python将指定目录下的所有json文件合并成一个csv文件
  3. 【ArcGIS遇上Python】Python批量将多个文件夹下的多个影像数据镶嵌至新栅格
  4. Android(kotlin)之对一组图片数据更新最后的修改时间进行分类显示
  5. linux之 !!命令
  6. Android之在TextView里面部分文字变颜色并且可以点击
  7. 主成分分析步骤_多元分析(1)--主成分分析
  8. python数据类型描述_【文山玩Python】用python的数据类型,来简单的描述世界
  9. c语言整形除法是五舍六入吗,四舍六入五成双 - C/C++论坛 - 51CTO技术论坛_中国领先的IT技术社区...
  10. 目瞪口呆!137亿年的宇宙演化,竟然如此震撼!简直颠覆想象....