1 簡介
就在幾天前,Python
3.10的第一個正式版本3.10.0
釋出,之前我們只是從其各個測試版本中捕風捉影地知曉了一些可能加入的新特性,而在正式版本中,我們得以一睹其正式加入的諸多新特性。
本文我就將帶大家學習如何通過conda
快速安裝3.10正式版本的Python
,並體驗其重要的一些新特性。
2 Python 3.10正式版本重要特性一覽
如果你已經安裝了conda
,那麼直接通過conda-forge
的channel
,只需要下面這一行命令即可建立新的Python
3.10正式版本虛擬環境:
conda create -n py310 python=3.10 -c conda-forge -y
完成安裝之後,啟用環境進入Python
的shell,可以看到版本為3.10.0,離譜的是我在使用pycharm
設定環境後,嶄新的3.10.0環境竟然被識別為3.1(真是醉了)?,於是我換成用vscode
進行演示:
下面就讓我們來體驗其重要的一些新特性吧~
2.1 新的結構模式匹配語法
上一次為Python
引入新的語法和關鍵字還是async
,而在這次的新版本中,引入了新的關鍵字match
與case
,從而幫助我們得以在Python
中使用到其他語言中類似switch
的語法,使用方式如下面例子所示,對於match
其後宣告的值,後續的每個case
會驗證是否與其對應值相等,最後的case _
中的_
代表Irrefutable Pattern,相當於萬用字元,但是隻允許置於最後一個case
中:
import sys
match sys.argv[1]:
case '1':
print(1)
case '2':
print(2)
case '3':
print(3)
case _:
print('其他輸入')
match-case
語法配合上萬用字元_
,當輸入容器型別的資料結構時,可以進行一些更加自由的判斷:
import sys
# 1 新的結構模式匹配語法
match sys.argv[1:]:
case ['1', '2', '3']:
print('分支1')
case ['4', _, '6']:
print('分支2')
case ['7', '8', _]:
print('分支3')
case _:
print('超出已知選項!')
更有趣的是,我們還可以使用任意自定義變數名,在match-case
的作用域內輔助通配匹配,從而實現類似下面例子的效果:
import sys
# 1 新的結構模式匹配語法
match (int(sys.argv[1]), int(sys.argv[2])):
case (0, 0):
print("原點")
case (0, y):
print(f"Y={y}")
case (x, 0):
print(f"X={x}")
case (x, y):
print(f"X={x}, Y={y}")
case _:
print('輸入非法!')
類似的,針對物件的屬性值,也可以進行類似的通配判斷,更多用法你可以參考下面的例子進行擴充:
import sys
class Demo:
x: int
y: int
demo = Demo()
demo.x = int(sys.argv[1])
demo.y = int(sys.argv[2])
# 1 新的結構模式匹配語法
match demo:
case Demo(x=0, y=0):
print("原點")
case Demo(x=0, y=y):
print(f"Y={y}")
case Demo(x=x, y=0):
print(f"X={x}")
case Demo(x=x, y=y):
print(f"X={x}, Y={y}")
case _:
print('輸入非法!')
2.2 更清晰的錯誤提示
在Python
3.10中,針對常見的各種錯誤型別,執行程式碼後的錯誤提示更加明確,譬如下面是3.9與3.10針對同一種錯誤的錯誤輸出資訊對比:
2.3 支援括號包裹的多上下文管理器
這個特性其實在3.9中就開始出現,在3.10中進一步得到完善,使得下面的用法合法(與3.7進行對比):
2.4 更方便的聯合型別提示設定
在之前的版本中,當我們用到多型別提示時,得這樣寫:
from typing import Union, string
def some_funcion(flexible_parameter: Union[int, string]) -> Union[int, string]:
return flexible_parameter
而在3.10中,多型別聯合不再必須用到Union
,使用|
連線即可,非常的方便:
from typing import string
def some_funcion(flexible_parameter: int | string) -> int | string:
return flexible_parameter
2.5 更加準確的錯誤程式碼行位置提示
在Python
3.10中,程式碼的錯誤提示,對於具體錯誤行位置的提示更加準確了:
以上就是本文的全部內容,歡迎在評論區與我進行討論。