av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

Python 3.10 有哪些新特性 ?

Python中文社區(qū)(ID:python-china)

創(chuàng)新互聯(lián)公司公司2013年成立,先為銀州等服務(wù)建站,銀州等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為銀州企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。

Python 3.10 的開(kāi)發(fā)已經(jīng)穩(wěn)定下來(lái),我們終于可以測(cè)試最終版本中將包含的所有新功能。下面我們將介紹 Python 3.10 中最有趣的一些新增功能——結(jié)構(gòu)模式匹配、帶括號(hào)的上下文管理器、 更多類(lèi)型以及新的報(bào)錯(cuò)消息。

結(jié)構(gòu)模式匹配

結(jié)構(gòu)模式匹配是要添加到 Python 中的一個(gè)很棒的功能。想象一個(gè)如下所示的 if-else 語(yǔ)句(Python 3.9):

 
 
 
 
  1. http_code = "418"  
  2.  if http_code == "200":  
  3.  print("OK")  
  4.  elif http_code == "404":  
  5.  print("Not Found")  
  6.  elif http_code == "418":  
  7.  print("I'm a teapot")  
  8.  else:  
  9.  print("Code not found") 

輸出:

 
 
 
 
  1. I'm a teapot 

Python 3.10 中可以這樣寫(xiě): 

 
 
 
 
  1. http_code = "418"  
  2.    match http_code:  
  3.    case"200":  
  4.    print("OK")  
  5.    case"404":  
  6.    print("Not Found")  
  7.    case"418":  
  8.    print("I'm a teapot")  
  9.    case _:  
  10.    print("Code not found") 

這就是新的 match-case語(yǔ)句——很酷,但目前還沒(méi)有什么特別之處。使 match-case語(yǔ)句如此有趣的原因是一種稱(chēng)為結(jié)構(gòu)模式匹配的東西。結(jié)構(gòu)模式匹配允許我們執(zhí)行相同的 match-case 邏輯,但基于我們的比較對(duì)象的結(jié)構(gòu)是否與給定的模式匹配。

因此,讓我們定義兩個(gè)字典,它們都具有不同的結(jié)構(gòu)。

 
 
 
 
  1. dict_a = {  
  2. 'id': 1,  
  3. 'meta': {  
  4. 'source': 'abc', 
  5. 'location': 'west'  
  6. }  
  7. }  
 
 
 
 
  1. dict_b = {  
  2. 'id': 2,  
  3. 'source': 'def', 
  4. 'location': 'west'  

現(xiàn)在,我們可以編寫(xiě)一個(gè)模式來(lái)匹配 dict_a,如下所示:

 
 
 
 
  1. {  
  2. 'id': int,  
  3. 'meta': {'source': str,  
  4. 'location': str}  

還有一個(gè)匹配 dict_b的模式:

 
 
 
 
  1. {  
  2.   'id': int,  
  3.   'source': str,  
  4.   'location': str  
  5.   } 

如果我們將這兩個(gè)放在一個(gè) match-case語(yǔ)句中,以及有效的 else/和包羅萬(wàn)象的 case_ - 我們得到:

 
 
 
 
  1. # loop through both dictionaries and a 'test'  
  2. for d in[dict_a, dict_b, 'test']:  
  3.     match d:  
  4. case{'id': ident,  
  5. 'meta': {'source': source,  
  6. 'location': loc}}:  
  7. print(ident, source, loc)  
  8. case{'id': ident,  
  9. 'source': source,  
  10. 'location': loc}:  
  11. print(ident, source, loc)  
  12. case _:  
  13. print('no match') 

輸出結(jié)果:

 
 
 
 
  1. 1 abc west  
  2. 2def west  
  3. no match 

是不是很酷?我已經(jīng)發(fā)現(xiàn)這對(duì)數(shù)據(jù)處理非常有用。

帶括號(hào)的上下文管理器

一個(gè)較小的變化是新的基于 PEG 的解析器。以前的 Python 解釋器有很多限制,這限制了 Python 開(kāi)發(fā)人員可以使用的語(yǔ)法。

Python 3.9 的基于 PEG 的解析器消除了這些障礙,從長(zhǎng)遠(yuǎn)來(lái)看,這可能會(huì)導(dǎo)致更優(yōu)雅的語(yǔ)法——這種變化的第一個(gè)例子是新的帶括號(hào)的上下文管理器。在 Python 3.9 之前,我們可以寫(xiě)這樣的東西來(lái)打開(kāi)兩個(gè)(或更多)文件 I/O 流:

 
 
 
 
  1. with open('file1.txt', 'r') as fin, open('file2.txt', 'w') as fout:  
  2.     fout.write(fin.read()) 

第一行很長(zhǎng)。但是由于解析器的限制,我們可以將此行拆分為多行的唯一方法是使用 \ 行繼續(xù)符:

 
 
 
 
  1. with open('file1.txt', 'r') as fin, \  
  2.      open('file2.txt', 'w') as fout:  
  3.     fout.write(fin.read()) 

它是有效的,但不是很 Pythonic。使用新的解析器,我們現(xiàn)在可以將括號(hào)將這一行拆分為多行,如下所示:

 
 
 
 
  1. with(open('file1.txt', 'r') as fin,  
  2.       open('file2.txt', 'w') as fout):  
  3.     fout.write(fin.read()) 

這種寫(xiě)法很Pythonic。現(xiàn)在,在我們繼續(xù),如果我們寫(xiě):

 
 
 
 
  1. with(open('file1.txt', 'r') as fin,  
  2.        open('file2.txt', 'w') as fout):  
  3.      fout.write(fin.read()) 

在 Python 3.9 中也可以這樣寫(xiě)。這是因?yàn)樾碌慕馕銎鲉⒂昧诉@種語(yǔ)法,盡管直到 Python 3.10 才被正式支持。

Typing功能

Python 的輸入功能也有更多更新。這里最有趣的添加是包含了一個(gè)新的運(yùn)算符,它的行為類(lèi)似于類(lèi)型的 OR 邏輯,我們之前使用 Union 方法來(lái)實(shí)現(xiàn):

 
 
 
 
  1. from typing importUnion  
  2. def add(x: Union[int, float], y: Union[int, float]):  
  3. return x + y 

現(xiàn)在,我們不需要寫(xiě)成 fromtypingimportUnion,并且 Union[int,float] 已經(jīng)簡(jiǎn)化為 int|float,看起來(lái)更簡(jiǎn)潔:

 
 
 
 
  1. def add(x: int| float, y: int| float):  
  2. return x + y 

更加完善的報(bào)錯(cuò)信息

相信你第一次看到時(shí)都會(huì)去百度或者 Google 搜索:

 
 
 
 
  1. SyntaxError: unexpected EOF while parsing 

輸入 SyntaxError 時(shí),Google 中排名第一的結(jié)果表明我們中的許多人確實(shí)在某個(gè)時(shí)候做過(guò)。

這不是一條明確的報(bào)錯(cuò)消息,Python 中充滿(mǎn)了不太明確的報(bào)錯(cuò)消息。幸運(yùn)的是,有人注意到了它們——其中許多消息都得到了顯著改善。

官方更改列表中提到了更多改動(dòng) - 但在測(cè)試期間似乎沒(méi)有顯示,包括:

 
 
 
 
  1. from collections import namedtoplo  
  2.  > AttributeError: module'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple? 

在這里, AttributeError 與之前相同,但增加了一個(gè)建議的屬性名稱(chēng)—— namedtoplo 被標(biāo)識(shí)為屬性 namedtuple的潛在拼寫(xiě)錯(cuò)誤。

同樣,我們看到 NameError消息也有相同的改進(jìn):

 
 
 
 
  1. new_var = 5  
  2. print(new_vr)  
  3. > NameError: name 'new_vr'isnotdefined. Did you mean: new_var? 

總結(jié)

以上是 Python 3.10 引入的一些關(guān)鍵新功能!

完整版本預(yù)計(jì)于 2021 年 10 月 4 日發(fā)布,從現(xiàn)在開(kāi)始,Python 開(kāi)發(fā)人員將致力于改進(jìn)已經(jīng)添加的內(nèi)容——但不會(huì)引入新功能。如果您想自己檢查一下,可以從這里下載 3.10.0b1。


當(dāng)前標(biāo)題:Python 3.10 有哪些新特性 ?
本文地址:http://uogjgqi.cn/article/cdseojc.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢(xún)/運(yùn)營(yíng)咨詢(xún)/技術(shù)建議/互聯(lián)網(wǎng)交流