python 3.9性能_Python 3.9来了!这十个新特性值得关注
选自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来了!这十个新特性值得关注相关推荐
- python 3.9特性_Python 3.9来了!这十个新特性值得关注
选自towardsdatascience 作者:Farhad Malik 机器之心编译 编辑:陈萍 近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新.新的解析器.新的字符串函数 ...
- Python 3.9来了!这十个新特性值得关注
选自towardsdatascience 作者:Farhad Malik 机器之心编译 编辑:陈萍 近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新.新的解析器.新的字符串函数 ...
- python3 列表转字节_Python 3.9!10大新特性值得关注
选自towardsdatascience 作者:Farhad Malik机器之心编译编辑:陈萍 近日,Python 3.9 发布,并开发了一些新特性,包括字典合并与更新.新的解析器.新的字符串函数等. ...
- python 3.9 性能_Python 3.9 性能优化:更快的 list()、dict() 和 range() 等内置类型
原标题:Python 3.9 性能优化:更快的 list().dict() 和 range() 等内置类型 Python 的 3.9.0 版本正在开发中,计划在 2020-10-05发布final版本 ...
- python虚拟cpu性能_python实现可视化动态CPU性能监控
本文实例为大家分享了python可视化动态CPU性能监控的具体代码,供大家参考,具体内容如下 打算开发web性能监控,以后会去学js,现在用matp来补救下,在官网有此类模板,花了一点时间修改了下,有 ...
- python 服务端性能_python 学习笔记---Locust 测试服务端性能
由于人工智能的热度, python目前已经成为最受欢迎的编程语言,一度已经超越Java . 本文将介绍开源的python 测试工具: locust 使用步骤: 1. 安装python 3.0以上版本 ...
- python dict遍历性能_python 字典(dict)遍历的四种方法性能测试报告
python中,遍历dict的方法有四种.但这四种遍历的性能如何呢?我做了如下的测试 l = [(x,x) for x in xrange(10000)] d = dict(l) from time ...
- python如何提高性能_python – 如何在这个短代码中提高numpy性能...
我试图了解为什么我的一个python脚本比gfortran慢了约4倍,我必须这样做: import numpy as np nvar_x=40 nvar_y=10 def fn_tst(x): for ...
- python装饰器性能_python装饰器的特性原理详解
这篇文章主要介绍了python装饰器的特性原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 今天发现了装饰器的另一种用法,下面就先上代码: d ...
最新文章
- ie-css3.htc参数无效,ie-css3.htc怎么用?
- 最简单的一个java驱动jdbc链接mysql数据库
- Python3——字典
- openjdk和jdk_JDK 11:发行候选更新和OpenJDK JDK 11 LTS
- python RandomTrees特征编码
- Android中Dialog对话框
- 星界边境服务器Linux,星界边境 保护与密码锁 服务器插件Mod
- redis同步到磁盘
- 在Bash中重定向stderr和stdout
- 运动模糊(Montion blur)
- 傲腾服务器硬盘,Intel P5800X傲腾硬盘实测:不愧是世界最强
- Apache服务器的下载、安装、配置等等
- Elasticsearch _reindex Alias使用
- java caller_【JavaScript】callee 与 caller
- python实现位置定位_python定位位置
- S@Kura的PHP进阶之路(二)
- 疯狂的程序员-第六十七章
- MySQL - 设计游戏用户信息表
- h5自动播放视频且有声音的办法
- 设计模式之状态机模式
热门文章
- 验证码短信平台短信发送失败怎么办?
- 2019ICPC陕西邀请赛复盘
- [置顶] Google大表(BigTable)
- android查找投屏设备投屏投影
- 实用—使用you-get下载视频 ,图片,音频
- java根据文件名称判断文件类型
- java窗口how2j_http://how2j.cn/frontshowJavaPractises
- android 原生混编 flutter 并使用 flutter_boost进行跳转的步骤以及注意事项
- java开发框架emp入门教程,实战解析
- 将SuperMap iClient3D 9D(2019) for WebGL示例项目部署到iserver服务器上