利用Conda嘗鮮Python 3.10

添加微信號"CNFeffery"加入技術(shù)交流群
1 簡介
就在幾天前,Python3.10的第一個正式版本3.10.0發(fā)布,之前我們只是從其各個測試版本中捕風(fēng)捉影地知曉了一些可能加入的新特性,而在正式版本中,我們得以一睹其正式加入的諸多新特性。

本文我就將帶大家學(xué)習(xí)如何通過conda快速安裝3.10正式版本的Python,并體驗其重要的一些新特性。
2 Python 3.10正式版本重要特性一覽
如果你已經(jīng)安裝了conda,那么直接通過conda-forge的channel,只需要下面這一行命令即可創(chuàng)建新的Python3.10正式版本虛擬環(huán)境:
conda?create?-n?py310?python=3.10?-c?conda-forge?-y
完成安裝之后,激活環(huán)境進(jìn)入Python的shell,可以看到版本為3.10.0,離譜的是我在使用pycharm設(shè)置環(huán)境后,嶄新的3.10.0環(huán)境竟然被識別為3.1(真是醉了)??,于是我換成用vscode進(jìn)行演示:


下面就讓我們來體驗其重要的一些新特性吧~
2.1 新的結(jié)構(gòu)模式匹配語法
上一次為Python引入新的語法和關(guān)鍵字還是async,而在這次的新版本中,引入了新的關(guān)鍵字match與case,從而幫助我們得以在Python中使用到其他語言中類似switch的語法,使用方式如下面例子所示,對于match其后聲明的值,后續(xù)的每個case會驗證是否與其對應(yīng)值相等,最后的case _中的_代表Irrefutable Pattern,相當(dāng)于通配符,但是只允許置于「最后」一個case中:
import?sys
match?sys.argv[1]:
????case?'1':
????????print(1)
????case?'2':
????????print(2)
????case?'3':
????????print(3)
????case?_:
????????print('其他輸入')

match-case語法配合上通配符_,當(dāng)輸入容器類型的數(shù)據(jù)結(jié)構(gòu)時,可以進(jìn)行一些更加自由的判斷:
import?sys
#?1?新的結(jié)構(gòu)模式匹配語法
match?sys.argv[1:]:
????case?['1',?'2',?'3']:
????????print('分支1')
????case?['4',?_,?'6']:
????????print('分支2')
????case?['7',?'8',?_]:
????????print('分支3')
????case?_:
????????print('超出已知選項!')

更有趣的是,我們還可以使用任意自定義變量名,在match-case的作用域內(nèi)輔助通配匹配,從而實現(xiàn)類似下面例子的效果:
import?sys
#?1?新的結(jié)構(gòu)模式匹配語法
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('輸入非法!')

類似的,針對對象的屬性值,也可以進(jìn)行類似的通配判斷,更多用法你可以參考下面的例子進(jìn)行拓展:
import?sys
class?Demo:
????x:?int
????y:?int
demo?=?Demo()
demo.x?=?int(sys.argv[1])
demo.y?=?int(sys.argv[2])
#?1?新的結(jié)構(gòu)模式匹配語法
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 更清晰的錯誤提示
在Python3.10中,針對常見的各種錯誤類型,執(zhí)行代碼后的錯誤提示更加明確,譬如下面是3.9與3.10針對同一種錯誤的錯誤輸出信息對比:

2.3 支持括號包裹的多上下文管理器
這個特性其實在3.9中就開始出現(xiàn),在3.10中進(jìn)一步得到完善,使得下面的用法合法(與3.7進(jìn)行對比):

2.4 更方便的聯(lián)合類型提示設(shè)置
在之前的版本中,當(dāng)我們用到多類型提示時,得這樣寫:
from?typing?import?Union,?string
def?some_funcion(flexible_parameter:?Union[int,?string])?->?Union[int,?string]:
????return?flexible_parameter
而在3.10中,多類型聯(lián)合不再必須用到Union,使用|連接即可,非常的方便:
from?typing?import?string
def?some_funcion(flexible_parameter:?int?|?string)?->?int?|?string:
????return?flexible_parameter
2.5 更加準(zhǔn)確的錯誤代碼行位置提示
在Python3.10中,代碼的錯誤提示,對于具體錯誤行位置的提示更加準(zhǔn)確了:

以上就是本文的全部內(nèi)容,歡迎在評論區(qū)與我進(jìn)行討論。

加入知識星球【我們談?wù)摂?shù)據(jù)科學(xué)】
400+小伙伴一起學(xué)習(xí)!
· 推薦閱讀?·
