成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 3.10 有哪些新特性 ?

開發 后端
下面我們將介紹 Python 3.10 中最有趣的一些新增功能——結構模式匹配、帶括號的上下文管理器、 更多類型以及新的報錯消息。

[[406927]]

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

Python 3.10 的開發已經穩定下來,我們終于可以測試最終版本中將包含的所有新功能。下面我們將介紹 Python 3.10 中最有趣的一些新增功能——結構模式匹配、帶括號的上下文管理器、 更多類型以及新的報錯消息。

結構模式匹配

結構模式匹配是要添加到 Python 中的一個很棒的功能。想象一個如下所示的 if-else 語句(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 中可以這樣寫:   

  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語句——很酷,但目前還沒有什么特別之處。使 match-case語句如此有趣的原因是一種稱為結構模式匹配的東西。結構模式匹配允許我們執行相同的 match-case 邏輯,但基于我們的比較對象的結構是否與給定的模式匹配。

因此,讓我們定義兩個字典,它們都具有不同的結構。 

  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'  

現在,我們可以編寫一個模式來匹配 dict_a,如下所示: 

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

還有一個匹配 dict_b的模式: 

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

如果我們將這兩個放在一個 match-case語句中,以及有效的 else/和包羅萬象的 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') 

輸出結果: 

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

是不是很酷?我已經發現這對數據處理非常有用。

帶括號的上下文管理器

一個較小的變化是新的基于 PEG 的解析器。以前的 Python 解釋器有很多限制,這限制了 Python 開發人員可以使用的語法。

Python 3.9 的基于 PEG 的解析器消除了這些障礙,從長遠來看,這可能會導致更優雅的語法——這種變化的第一個例子是新的帶括號的上下文管理器。在 Python 3.9 之前,我們可以寫這樣的東西來打開兩個(或更多)文件 I/O 流: 

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

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

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

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

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

這種寫法很Pythonic?,F在,在我們繼續,如果我們寫: 

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

在 Python 3.9 中也可以這樣寫。這是因為新的解析器啟用了這種語法,盡管直到 Python 3.10 才被正式支持。

Typing功能

Python 的輸入功能也有更多更新。這里最有趣的添加是包含了一個新的運算符,它的行為類似于類型的 OR 邏輯,我們之前使用 Union 方法來實現: 

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

現在,我們不需要寫成 fromtypingimportUnion,并且 Union[int,float] 已經簡化為 int|float,看起來更簡潔: 

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

更加完善的報錯信息

相信你第一次看到時都會去百度或者 Google 搜索: 

  1. SyntaxError: unexpected EOF while parsing 

輸入 SyntaxError 時,Google 中排名第一的結果表明我們中的許多人確實在某個時候做過。

這不是一條明確的報錯消息,Python 中充滿了不太明確的報錯消息。幸運的是,有人注意到了它們——其中許多消息都得到了顯著改善。

官方更改列表中提到了更多改動 - 但在測試期間似乎沒有顯示,包括: 

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

在這里, AttributeError 與之前相同,但增加了一個建議的屬性名稱—— namedtoplo 被標識為屬性 namedtuple的潛在拼寫錯誤。

同樣,我們看到 NameError消息也有相同的改進: 

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

總結

以上是 Python 3.10 引入的一些關鍵新功能!

完整版本預計于 2021 年 10 月 4 日發布,從現在開始,Python 開發人員將致力于改進已經添加的內容——但不會引入新功能。如果您想自己檢查一下,可以從這里下載 3.10.0b1。 

 

責任編輯:龐桂玉 來源: Python中文社區
相關推薦

2013-05-17 09:24:50

LinuxLinux 3.10

2021-10-08 15:55:52

Python模塊開發

2013-02-25 14:02:07

RubyWeb

2021-03-30 14:50:41

前端TypeScript 命令

2021-10-27 10:15:25

Python新特性編程語言

2017-09-16 15:55:54

ChromeJavaScriptAndroid

2021-11-04 06:58:31

Python開源特性

2023-06-28 00:40:01

ECMAScriptWeakMapSymbol

2022-06-24 08:33:13

ECMAScriptjavaScript

2020-07-03 09:55:28

Python 開發編程語言

2020-07-14 08:45:13

Flink特性jira

2021-11-17 10:45:58

Chrome 95新特性前端

2022-01-27 08:58:13

Python新版本特性

2010-08-06 15:14:03

DB2 V9.5 新特

2012-03-24 21:02:41

iOS

2010-11-25 13:53:13

VPNDVPN

2018-03-26 09:19:44

JavaScript開發 特性

2024-01-22 00:30:00

Go編程Go 1.22

2015-08-18 10:23:10

AdobeAcrobat DC

2009-05-26 11:15:31

C# 4.0dynamicVisual Stud
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕免费中文 | 国产精品久久 | 国产精品一区二区在线免费观看 | 国产99免费 | jizz视频| 黄色片在线看 | 成人欧美一区二区三区黑人孕妇 | av黄色片 | 午夜av成人| 成人午夜免费福利视频 | av先锋资源| 精品国产一区二区三区免费 | 超碰婷婷| 中文字幕亚洲区一区二 | 激情婷婷成人 | 在线播放精品视频 | 福利片一区二区 | 久久免费视频2 | 亚洲欧洲精品在线 | 99国产视频 | 一区二区三区四区在线视频 | 午夜精品一区二区三区在线视频 | 亚洲精品68久久久一区 | 伊色综合久久之综合久久 | 91视频在线 | 欧美日韩在线精品 | 看a级黄色毛片 | 久久久久久久久久久久久九 | 国产精品久久久久久av公交车 | 日韩精品在线网站 | 亚洲一区有码 | 欧美在线精品一区 | 欧美日韩视频一区二区 | 成人av片在线观看 | 午夜精品 | 国产免费一区二区三区网站免费 | 国产精品亚洲成在人线 | 九九九久久国产免费 | 欧美成人精品一区二区男人看 | 国产一区二区三区视频 | 一级做a|