乐趣区

关于python:颠覆你认知的Python39

我通读了 python 3.9 发行阐明和相干的探讨。依据这些信息,我想写一个全面的指南,以便每个人都能一眼理解这些性能及其具体的工作原理

原文地址,点击这里,观看成果更佳

简而言之

从字典更新 / 合并到增加新的字符串办法,再到引入 zoneinfo 库,都增加了许多新性能。

此外,曾经引入了新的稳固且高性能的解析器。
规范库已更新为具备许多新性能,并减少了新的模块 zoneinfographlib。多个模块曾经过改良,如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]
咱们能够将 listdict内置汇合类型用作通用类型,而不是应用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 替换
退出移动版