选自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. 字典更新和合并字典添加两个新的运算符:「|」和「|=」。「|」运算符用于合并字典,「|=」运算符用于更新字典。字典合并:

>>> a = {‘farhad’: 1, 'blog’: 2,'python’: 3}>>> b = {’farhad’: 'malik’,'topic’: 'python3.9’}>>> a | b{’blog’: 2, 'python’: 3, ’farhad’:’malik’,'topic’: 'python3.9’}>>> b | a{’farhad’: 1,’blog’: 2, 'python’: 3,'topic’:’python3.9’ }

字典更新:

>>> a |= b>>> a{’blog’: 2, 'python’: 3,’farhad’:’malik’}

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)

'farhad_python'.removeprefix('farhad_')#returns python'farhad_python'.removesuffix('_python')#returns farhad

4. 对内置泛型类型提供类型提示Python 3.9 通过删除并行类型层次结构,使注释程序变得更加简单。Python 3.9 支持 typing 模块所有标准集合中的泛型语法。我们可以将 list 或 dict 直接作为列表和字典的类型注释,而不必依赖 typing.List 或者 typing.Dict。因此,代码现在看起来更加简洁,而且更容易理解和解释。

def print_value(input: str): print(input)# We would get notified if the input is not a string

5. DateTime 支持 IANA 时区zoneinfo 模块被创建出来支持 IANA 时区数据库。对 IANA 时区数据库的支持已经添加到标准库中。IANA 时区通常称为 tz 或 zone info。存在许多具备不同搜索路径的 IANA 时区,用于为 date-time 对象指定 IANA 时区。例如,我们可以将对 datetime 对象设置搜索路径「Continent/City」来设置 tzinfo。

dt = datetime(2000, 01, 25, 01, tzinfo=ZoneInfo("Europe/London"))

如果传入一个无效的密钥,则会引发 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)和多进程库进行了优化。1. 由于安全问题的考虑,asyncio.loop.create_datagram_endpoint() 不再支持参数 reuse_address。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) 一致。

"".replace("", "blog", 1)Returns ’'One would expect to see blog"".replace("","|", 1)Returns ’'One would expect to see |"".replace("","prefix")Howver returns ’prefix'

如果大家想深入了解更多细节,请查阅官方文档:https://docs.python.org/zh-cn/3.9/whatsnew/3.9.html原文链接:https://towardsdatascience.com/10-awesome-python-3-9-features-b8c27f5eba5c

往期精彩:

【原创首发】机器学习公式推导与代码实现30讲.pdf

【原创首发】深度学习语义分割理论与实战指南.pdf

喜欢您就点个在看!

python3 列表转字节_Python 3.9!10大新特性值得关注相关推荐

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

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

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

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

  3. 圣诞快乐:Oracle Database 19c 的10大新特性一览

    在 ACOUG 年会的活动上,分享了一些从前未曾分享过的内容,想起,今年还欠下一篇文章,就整理和回顾一下,分享我所见到的Oracle 19c的一些重要改变(本文内容来自OOW大会演讲,关注本公众号回复 ...

  4. Java 10的10个新特性,将彻底改变你写代码的方式

    转载自 Java 10的10个新特性,将彻底改变你写代码的方式 Java 9才发布几个月,很多玩意都没整明白,现在Java 10又要来了.. 这时候我真尼玛想说:线上用的JDK 7 甚至JDK 6,J ...

  5. fir.im Weekly - 从 iOS 10 SDK 新特性说起

    2019独角兽企业重金招聘Python工程师标准>>> 从 iOS 7 翻天覆地的全新设计,iOS 8 中 Size Classes 的出现,应用扩展,以及 Cloud Kit 的加 ...

  6. 《精通ArcGIS Server 应用与开发》——1.3 ArcGIS 10 Mobile新特性1

    本节书摘来自异步社区<精通ArcGIS Server 应用与开发>一书中的第1章,第1.3节,作者: 何正国 , 杜娟 , 毛海亚 更多章节内容可以访问云栖社区"异步社区&quo ...

  7. 谷歌手机升级android10,Android Q安卓10.0新特性,首批支持升级21款手机

    原标题:Android Q安卓10.0新特性,首批支持升级21款手机 2019年5月8日,一年一度的谷歌I/O开发者大会在美国加州如期召开,并发布了全新系列Android Q(安卓10.0)操作系统, ...

  8. iphone android 功能清单,让iPhone羡慕:Android N最赞10大新功能

    原标题:让iPhone羡慕:Android N最赞10大新功能 不久,谷歌将正式发布Android N,它有超过250个新功能.安卓粉有福了. 很多新功能的目标都是使Android体验更快,更愉快,更 ...

  9. 看完 Python3.10 的新特性,我决定仍不更新

    Python3.10 在 2021 年的 10 月 3 号发布,目前已经过去好几个月了,关于它的新特性相信大家已经有所耳闻,不过我决定仍然不更新,目前我在用的版本是 Python3.8,没有任何不爽. ...

最新文章

  1. BN究竟起了什么作用?一个闭门造车的分析
  2. 使用python进行数据清洗常用的库_python3常用的数据清洗方法(小结)
  3. MYSQL关于日期统计常用的SQL语句
  4. CF1481F-AB Tree【构造,背包】
  5. 最小生成树Kruskal算法+并查集检查连通
  6. maven + sonar, gradle + sonar
  7. 一生必看的 100 幅世界名画
  8. 【1stopt】批处理拟合
  9. android banner设置图片比例,Banner基本使用 2.1.0
  10. 金庸武侠小说之我的见解
  11. requestLayout() improperly called by android.widget.GridView{43cefbd VFED.VC.. .F...... 0,0-2190,319
  12. 上海学车科目二,科目三容易扣分点分享,你了解多少
  13. 你知道二维码的图案原理吗?
  14. 逻辑学自然科学教育计算机,科学网—【逻辑学知识】自然推理系统 - 黄荣彬的博文...
  15. Ubuntu 设置 OpenDNS
  16. Wi-Fi easy Connect介绍
  17. 客户端禁用Cookie后session失效的问题
  18. NSIS使用教程(安装包制作安装文件教程,如何封装打包文件) 中文版
  19. 实践出真知:博云微服务经验之避坑指南
  20. html+css实战187-banner图

热门文章

  1. 使用CEfSharp之旅(7)CEFSharp 拦截 http 请求 websocket 内容
  2. Struts 2(八):文件上传
  3. 深入理解Java线程池:ThreadPoolExecutor
  4. JZOJ 5461 购物 —— 贪心
  5. poj 1964 Cow Cycling(dp)
  6. Java中单元测试中:@BeforeClass,@Before,@Test,@After,@AfterClass中的问题详解
  7. 2003網域升級到2008網域以及遷移DNS
  8. 一些JSON相关的函数
  9. C#编码标准--编码习惯
  10. 将Excel文件数据库导入SQL Server