W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
python3.10版本于2021年10月4日發(fā)布正式版,該版本帶來了七大新特性。為了讓大家對新版本有更好的認識,接下來的介紹會盡量添加python3.10版本和舊版本的代碼進行對比。
帶*號的為比較重要的特性。
Python3.10版本中,聯(lián)合運算符使用“|”線來代替了舊版本中的Union[]方法,使得程序更加簡潔,不僅如此,Python3.10在一些內置函數(shù)中,同樣可以利用“|”線的聯(lián)合運算符來提升程序的性能。
在函數(shù)中:
from typing import Union # 使用Union需要引入對應的包
# 舊版本
def oldFunc(para: Union[int, float]) -> Union[int, float]:
return para ** 2
# 新版本
def newFunc(para: int | float) -> int | float:
return para ** 2
print(newFunc(3))
在內置函數(shù)中使用聯(lián)合運算符:
# 舊版本
print(isinstance("W3Cschool", (str, int)))
# 新版本
print(isinstance("W3Cschool", str | int))
python3.10 中,with 支持使用外層圓括號來使用多個上下文管理器,可以連續(xù)多行地書寫。這允許將過長的上下文管理器集能夠以與之前 import 語句類似的方式格式化為多行的形式。例如,以下這些示例寫法現(xiàn)在都是有效的:
with (CtxManager() as example):
pass
with (CtxManager1(),
CtxManager2()):
pass
with (CtxManager1() as example,
CtxManager2()):
pass
with (CtxManager1(),
CtxManager2() as example):
pass
with (CtxManager1() as example1,
CtxManager2() as example2
):
pass
Python 3.10 引入了結構化的模式匹配,通過match...case關鍵詞來完成,可以匹配字典,類以及其他更復雜的結構。match...case的模式匹配,在使用的方式上與C++中的switch有很多的相似之處。
下面的函數(shù)中,case函數(shù)通過匹配grade,如果grade為'A',則匹配到第一個例子,如果grade為'B',則匹配到第二個例子...如果前面的案例都不滿足時,則輸出最后的默認結果。
grade = 'B'
match grade: # 看grade變量,并與下面的case做對比(類似其他語言的switch
case 'A': # 如果grade為'A',則執(zhí)行該代碼塊
print("很棒")
case 'B': # 如果grade為'B',則執(zhí)行該代碼塊
print("做得好")
case 'C': # 如果grade為'C',則執(zhí)行該代碼塊
print("您通過了")
case "D":
print("最好再試一下")
case _: # 如果上面的所有case都未命中,則執(zhí)行該代碼塊(類似于其他語言的default)
print("無效的成績")
在Python3.10中,針對于字典的三個方法,items,keys和values都增加了一個新的“mapping”屬性,通過上述的程序可以發(fā)現(xiàn),對三個方法調用mapping屬性后都會返回原字典數(shù)據(jù)。
mydict = {"W3Cschool": 1, "baidu": 2, "Google": 3}
# 舊版本
print(mydict.keys())
print(mydict.values())
print(mydict.items())
# 新版本
keys = mydict.keys()
values = mydict.values()
items = mydict.items()
print(keys.mapping)
print(values.mapping)
print(items.mapping)
# 可以理解為我們可以根據(jù)字典的keys,values,items反向推出這個字典
函數(shù) zip() 增加 strict 參數(shù)
Python3.10中對于zip函數(shù)添加了strict參數(shù),顧名思義,strict參數(shù)就是要嚴格的遵守參數(shù)長度的匹配原則,下面程序中,keys和values列表的長度并不一致。
舊版本的zip函數(shù)會根據(jù)長度最短的參數(shù)來創(chuàng)建字典。新版本的zip函數(shù)中,當設定strict參數(shù)設置為True時,則要求zip的輸入?yún)?shù)必須要長度一致,否則就會報錯。
keys = ['W3Cschool', 'Baidu', 'Google']
values = [1,2,3,4]
#舊版本
try:
print(dict(zip(keys,values)))
except:
print("字典創(chuàng)建失敗")
try:
print(dict(zip(keys, values, strict=True)))
# 增加strict參數(shù)后,如果兩個列表長度不等,創(chuàng)建的時候會報錯
except:
print("字典創(chuàng)建失敗")#報錯后使用try-except語句捕獲
在Python3.10版本中,可以通過調用bit_count函數(shù)來統(tǒng)計二進制中數(shù)字“1”的個數(shù),當然,在舊版本中,也可以通過很簡單的代碼實現(xiàn)這個功能。
value = 5
#舊版本
print(bin(value).count("1"))
#新版本
print(value.bit_count())
在舊版本中,可以直接通過不同類型的賦值操作來賦予類型新的名字,而在Python3.10版本中,則通過TypeAlias來規(guī)定了類型名字的替換。這樣操作的優(yōu)勢在于能夠讓程序開發(fā)人員和Python編輯器更加清楚的知道newname是一個變量名還是一個類型的別名,提升程序開發(fā)的可靠性。
from typing import TypeAlias # 使用TypeAlias需要導入相關的包
#舊版本
oldname = str
def oldFunc(paran:olaname)->oldname:
return param+param
#新版本
newname:TypeAlias = str
def newFunc(param:newname)->newname:
return param+param
print(newFunc("W3Cschool"))
由于Distutils庫的功能已經(jīng)被此setuptools和package庫取代了,所以本著簡潔性的原則,Distutils在不久的將來(3.12版本)將會被完全的刪除掉。
Distutils包為將待構建和安裝的額外的模塊,打包成 Python 安裝包提供支持。新模塊既可以是百分百的純 Python,也可以是用 C 寫的擴展模塊,或者可以是一組包含了同時用 Python 和 C 編碼的 Python 包。
大多數(shù) Python 用戶 不會 想要直接使用這個包,而是使用 Python 包官方維護的跨版本工具。特別地, setuptools 是一個對于 distutils 的增強選項,它能提供:
- 對聲明項目依賴的支持
- 額外的用于配置哪些文件包含在源代碼發(fā)布中的機制(包括與版本控制系統(tǒng)集成需要的插件)
- 生成項目“進入點”的能力,進入點可用作應用插件系統(tǒng)的基礎
- 自動在安裝時間生成 Windows 命令行可執(zhí)行文件的能力,而不是需要預編譯它們
- 跨所有受支持的 Python 版本上的一致的表現(xiàn)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: