当前位置: 首页 > 科技观察

Python3.9来了!这十个新特性值得关注

时间:2023-03-13 14:18:57 科技观察

近期,Python3.9发布,开发了一些新特性,包括字典合并和更新、新的解析器、新的字符串函数等。Python3.9于10月5日发布,有你有新版本的功能吗?对于Python程序员来说,又是一个激动人心的时刻。与之前的版本相比,Python3.9有哪些值得讨论的特性?总之,Python3.9增加了很多新特性,从字典更新/合并,到添加新的字符串方法,再到zoneinfo库的引入。此外,此版本还引入了一个新的稳定的高性能解析器。标准库更新了许多新功能,并添加了新模块zoneinfo和graphlib。此外,这个版本还改进了很多模块,比如ast、asyncio、concurrent.futures、multiprocessing、xml等。来源:https://twitter.com/PrasoonPratham/status/1313392420038483968下面让我们来探索一下Python的新特性3.9.Python3.9:10个有趣的新特性1.字典更新和合并字典添加两个新运算符:“|”和“|=”。“|”操作符用于合并字典,“|=”操作符用于更新字典。DictionaryMerge:DictionaryUpdate:2.High-PerformancePEG-BasedParserPython3.9提出用高性能稳定的PEG-basedparser替代当前基于LL(1)的Pythonparser。当前的CPython解析器基于LL(1),这是一个自上而下的解析器,从左到右解析输入。Python3.9提议用新的基于PEG的解析器替换LL(1),这意味着它将解除当前LL(1)语法对Python的限制。此外,当前的解析器修补了许多将被删除的hack。因此,从长远来看,这会降低维护成本。3、新的字符串函数:去除前缀和后缀Python3.9为str对象增加了两个新函数:第一个函数用于去除前缀:str.removeprefix(prefix)第二个函数用于去除后缀:str.removesuffix(后缀)4。为内置泛型类型提供类型提示Python3.9通过删除并行类型层次结构使注释程序变得更加容易。Python3.9支持typing模块的完整标准集中的通用语法。不依赖于typing.List或typing.Dict,我们可以直接使用list或dict作为列表和字典的类型注解。因此,代码现在看起来更清晰,更易于理解和解释。5.DateTime支持IANA时区zoneinfo模块是为了支持IANA时区数据库而创建的。标准库中添加了对IANA时区数据库的支持。IANA时区通常称为tz或时区信息。有许多具有不同搜索路径的IANA时区,用于为日期时间对象指定IANA时区。例如,我们可以将tzinfo设置为搜索datetime对象的路径“Continent/City”。如果传入无效密钥,则会引发zoneinfo.ZoneInfoNotFoundError异常。6.concurrent.futures优化concurrent.futures.Executor.shutdown()增加了一个新参数cancel_futures。该参数可以取消尚未执行的并发任务。在Python3.9之前,主进程只能在所有并发任务完成后关闭执行器对象。新参数cancel_futures已添加到ThreadPoolExecutor以及ProcessPoolExecutor。它的工作方式是:当参数值为True时,调用shutdown()函数时,所有挂起的任务都会被取消。7.异步编程和多进程优化Python3.9优化了异步编程(asyncio)和多进程库。2.添加协程、shutdown_default_executor()和asyncio.to_thread()。shutdown_default_executor负责关闭默认执行器,asyncio.to_thread()主要用于在单独的线程中运行IO密集型函数,避免事件循环。关于multiprocessing库的改进,Python3.9向multiprocessing.SimpleQueue类添加了一个新方法close()。此方法可以显式关闭队列。这将确保队列关闭并且不会停留比预期更长的时间。值得注意的是,一旦队列关闭,get()、put()和empty()方法就不能调用了。8.统一包导入错误在Python3.9之前导入Python库的主要问题是当相对导入超出其顶级包时,Python中的导入行为不一致。builtins.__import__()引发ValueError,而importlib.__import__()引发ImportError。Python3.9版本修复,统一抛出ImportError。9.生成随机字节Python3.9中添加了一个新函数random.Random.randbytes()。此函数可用于生成随机字节。Python支持生成随机数,但是如果需要生成随机字节怎么办?在Python3.9之前,开发人员必须弄清楚如何生成随机字节。尽管他们可以使用os.getrandom()、os.urandom()或secrets.token_bytes()来生成随机字节,但这些方法不能生成伪随机模式。为确保随机数生成按预期运行并且过程可重现,开发人员通常将种子与random.Random模块一起使用。因此,Python3.9增加了random.Random.randbytes()方法以可控的方式生成随机字节。10.修复了Python3.9之前的字符串替换函数,".replace("",s,n)对所有非零n返回空字符串而不是s。此错误会使用户感到困惑并导致应用程序的行为不一致。Python3.9修复了这个问题,无论n是否为0,结果都与".replace("",s)一致。如果想了解更多细节,请参考官方文档:https://docs.python.org/zh-cn/3.9/whatsnew/3.9.html