我通读了python 3.9发行说明和相关的讨论。根据这些信息,我想写一个全面的指南,以便每个人都能一眼了解这些功能及其详细的工作原理
简而言之
从字典更新/合并到添加新的字符串方法,再到引入zoneinfo
库,都添加了许多新功能。
此外,已经引入了新的稳定且高性能的解析器。
标准库已更新为具有许多新功能,并增加了新的模块zoneinfo
和graphlib
。多个模块已经过改进,如ast,asyncio,concurrent.futures,multiprocessing,xml
等.
这个版本进一步稳定了Python标准库
两个新的运算符,|
并且|=
已添加到内置dict
类中。
该|
运算符用于合并的字典,而|=
运营商可用于更新词典。
代码对于合并:|
>>> 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)
'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运行时类型检查:
def print_value(input:str):
print(input)
#如果输入不是字符串,我们将得到通知
举例来说,我们会看到typing.List,typing.Dictionary
带有内置一起list,dictionary
等。这使我们能够编写代码:
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
函数的工作方式是,对于给定的最大替换发生参数,它将字符串中的一组字符替换为一组新的字符。
srting.replace(s,old,new,[,maxreplace])
# 返回字符串 s的副本,其中所有出现的子字符串old都被new替换