我通读了python 3.9发行阐明和相干的探讨。依据这些信息,我想写一个全面的指南,以便每个人都能一眼理解这些性能及其具体的工作原理
原文地址,点击这里,观看成果更佳
简而言之
从字典更新/合并到增加新的字符串办法,再到引入zoneinfo
库,都增加了许多新性能。
此外,曾经引入了新的稳固且高性能的解析器。
规范库已更新为具备许多新性能,并减少了新的模块zoneinfo
和graphlib
。多个模块曾经过改良,如ast,asyncio,concurrent.futures,multiprocessing,xml
等.
这个版本进一步稳固了Python规范库
字典更新和合并运算符
两个新的运算符,|
并且|=
已增加到内置dict
类中。
该|运算符用于合并的字典,而|=运营商可用于更新词典。
代码对于合并:|
<code class="py">>>> 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'}
正如咱们在下面看到的,两个新的运算符|
和|=
已被增加到内置dict
类中
删除前后缀新字符串
str对象中已增加了两个新性能。
- 第一个函数删除前缀。是的
str.removeprefix(prefix)
- 第二个性能删除后缀。是的
str.removesuffix(suffix)
<code class="py">'coxie_python'.removeprefix('coxie_') # 返回python 'coxie_python'.removesuffix('_python') # 返回coxie
- 第一个函数删除前缀。这是str.removeprefix(prefix).
- 第二个性能删除后缀。它是str.removesuffix(suffix).
内置通用类型的类型提醒
此版本已启用了键入模块中以后可用的所有规范汇合中对泛型语法的反对。
泛型类型通常是一个容器,例如列表。这是能够参数化的类型。参数化的泛型是泛型的实例,具备容器元素的预期类型,例如list [str]
咱们能够将list
或dict
内置汇合类型用作通用类型,而不是应用typing.List or typing.Dict.
例如,咱们能够通过正文代码来领导Python运行时类型查看:
<code class="py">def print_value(input:str): print(input) #如果输出不是字符串,咱们将失去告诉
举例来说,咱们会看到typing.List,typing.Dictionary
带有内置一起list,dictionary
等。这使咱们可能编写代码:
<code class="py">def read_blog_tags(tags:list[str[) -> None for dtag in tags: print("Tag Name",tag)
随机字节生成
在3.9版本中增加的另一个性能是function random.Random.randbytes()
。该函数可用于生成随机字节。
咱们能够生成随机数,然而如果咱们须要生成随机字节怎么办?在3.9版之前,开发人员必须具备创造力能力生成随机字节。只管咱们能够应用,os.getrandom(), os.urandom() or secrets.token_bytes()
然而咱们不能生成伪随机模式。
例如,为确保随机数以预期的形式生成且过程可重现,咱们通常将种子与random.Random
模块一起应用。
后果,random.Random.randbytes()
曾经引入了办法。它也能够以受控形式生成随机字节。
字符串替换性能修复
在Python 3.9之前的版本中,“”.replace(“”,s,n)
对于所有非零n ,返回的空字符串而不是s。
此谬误使用户感到困惑,并导致应用程序中行为不统一。
3.9版本已解决此问题,当初与保持一致"".replace("", s)
。replace
函数的工作形式是,对于给定的最大替换产生参数,它将字符串中的一组字符替换为一组新的字符。
<code class="py">srting.replace(s,old,new,[,maxreplace]) # 返回字符串 s的正本,其中所有呈现的子字符串old都被new替换