利用Conda嚐鮮Python 3.10

費弗裡發表於2021-10-09

1 簡介

  就在幾天前,Python3.10的第一個正式版本3.10.0釋出,之前我們只是從其各個測試版本中捕風捉影地知曉了一些可能加入的新特性,而在正式版本中,我們得以一睹其正式加入的諸多新特性。

利用Conda嚐鮮Python 3.10

  本文我就將帶大家學習如何通過conda快速安裝3.10正式版本的Python,並體驗其重要的一些新特性。

2 Python 3.10正式版本重要特性一覽

  如果你已經安裝了conda,那麼直接通過conda-forgechannel,只需要下面這一行命令即可建立新的Python3.10正式版本虛擬環境:

conda create -n py310 python=3.10 -c conda-forge -y

  完成安裝之後,啟用環境進入Python的shell,可以看到版本為3.10.0,離譜的是我在使用pycharm設定環境後,嶄新的3.10.0環境竟然被識別為3.1(真是醉了)?,於是我換成用vscode進行演示:

利用Conda嚐鮮Python 3.10
利用Conda嚐鮮Python 3.10

  下面就讓我們來體驗其重要的一些新特性吧~

2.1 新的結構模式匹配語法

  上一次為Python引入新的語法和關鍵字還是async,而在這次的新版本中,引入了新的關鍵字matchcase,從而幫助我們得以在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('其他輸入')

利用Conda嚐鮮Python 3.10

  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('超出已知選項!')
利用Conda嚐鮮Python 3.10

  更有趣的是,我們還可以使用任意自定義變數名,在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('輸入非法!')
利用Conda嚐鮮Python 3.10

  類似的,針對物件的屬性值,也可以進行類似的通配判斷,更多用法你可以參考下面的例子進行擴充:

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('輸入非法!')
利用Conda嚐鮮Python 3.10

2.2 更清晰的錯誤提示

  在Python3.10中,針對常見的各種錯誤型別,執行程式碼後的錯誤提示更加明確,譬如下面是3.9與3.10針對同一種錯誤的錯誤輸出資訊對比:

利用Conda嚐鮮Python 3.10

2.3 支援括號包裹的多上下文管理器

  這個特性其實在3.9中就開始出現,在3.10中進一步得到完善,使得下面的用法合法(與3.7進行對比):

利用Conda嚐鮮Python 3.10

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 更加準確的錯誤程式碼行位置提示

  在Python3.10中,程式碼的錯誤提示,對於具體錯誤行位置的提示更加準確了:

利用Conda嚐鮮Python 3.10

    以上就是本文的全部內容,歡迎在評論區與我進行討論。

相關文章