本篇文章3357字,读完约8分钟
从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。
图源: Twitter/PrasoonPratham/status/1313392420038483968
那么,让我们一起探究一下python 3.9的新特征吧。
python 3.9:10个兴趣的新特征
1 .更新和合并词典
词典中添加了“|”和“|=”两个新运算符。 “|”运算符用于合并词典,“|=”运算符用于更新词典。
合并词典:
>; >; >; a = {‘Farhad’: 1,‘blog’: 2,‘Python’:3} & GT; >; >; b = {’Farhad’: ' Malik’,' ToPIC’: ' Python 3.9’} & GT; >; >; A|b {’blog’: 2,‘Python’: 3,’Farhad’:’Malik >; >; b|a {’Farhad’: 1
更新词典:
>; >; >; a |= b>; >; >; a {’blog’: 2,‘Python’: 3,’Farhad’:’Malik’>
2 .基于PEG的高性能解析器
python 3.9提出了将现在的基于ll(1)的python解析器替换为高性能稳定的基于peg的解析器。
现在的cpython解析器基于ll(1),ll(1)解析器是从左向右分析输入的自上而下的解析器。
python 3.9提出了用新的基于peg的解析器替换ll(1),这意味着解除了现在ll(1)语法对python的限制。 此外,当前解析器修复了多个要删除的hack。 因此,从长期来看,维护价格会下降。
3 .新型字符串函数:删除前缀和后缀
python 3.9向str对象添加两个新函数。
第一个函数用于删除前缀str.removeprefix(prefix )。
第二个函数用于删除后缀str.removesuffix(suffix )。
' Farhad _ Python '.remove Prefix ( ' Farhad _ ' ) # returns Python ' Farhad _ Python '.remove Suffix
4 .为嵌入式通用型提供类型提示
python 3.9通过删除并行型层次使注释程序更简单。 python 3.9支持typing模块中所有标准集合的通用语法。
list或dict可以直接用作列表和词典的类型注释,而不依赖于typing.list或typing.dict。 因此代码看起来更简洁,更容易理解和解释。
def print _ value ( input:str ):print ( input ) # wewouldgetnotifiediftheinputisnotastring
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.shut down ( )中添加了新参数cancel_futures。 此参数取消还没有执行的并发任务。 在所有并发任务完成之前,python 3.9之前的主进程无法关闭executor对象。
新参数cancel_futures添加到threadpoolexecutor和processpoolexecutor中。 其工作是如果参数值为true,则取消调用shutdown ( )函数时要解决的所有任务。
7 .异步编程和多过程优化
python 3.9优化了异步编程( asyncio )和多进程库。
1 .考虑到安全问题,async io.loop.create _ datagram _ endpoint ( )不再支持参数reuse_address。
添加了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。 python版本3.9已修复,统一引起importerror。
9 .生成随机字节
在python版本3.9中,添加了新的函数random.random.randbytes ( )。 这个函数可以用于生成随机字节。
python支持生成随机数,但如果需要生成随机字节呢? 在python版本3.9以前,开发者必须设法生成随机字节。 他们可以使用os.getrandom ( )、os.urandom ( )或secrets.token_bytes ( )生成随机字节,但这些方法不能生成伪随机模式。
开发者一般采用种子和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’' onewouldexpecttoseeblog ".replace ( ","|)。
想更详细地了解的人,请参阅官方文件: docs.python/zh-cn/3.9/whats new/3.9。
原文链接: towardsdatascience/10-awesome-python-3-9-features-B8C 27 F5eba 5c
取出唱p主的弹幕和评论,进行广告发布的解体。
10月14日,aws处理方案设计师贺浏阳将带来live coding,演示如何利用aws云服务构建简单的数据管道。
原标题:“python 3.9来了! 这十个新特点值得注意"
阅读原文。