




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
第Pythonmatch語句的具體使用python3.10支持match語句,3,10以下不支持。
match語句接受一個表達(dá)式,并將其值與作為一個或多個case塊給出的連續(xù)模式進(jìn)行比較。這表面上類似于C、Java或JavaScript(以及許多其他語言)中的switch語句,但更類似于Rust或Haskell等語言中的模式匹配。只有第一個匹配的模式才會被執(zhí)行,它還可以將值中的組件(序列元素或?qū)ο髮傩裕┨崛〉阶兞恐小?/p>
最簡單的形式是將一個目標(biāo)值與一個或多個字面值進(jìn)行比較:
defhttp_error(status):
matchstatus:
case400:
return"Badrequest"
case404:
return"Notfound"
case418:
return"I'mateapot"
case_:
return"Something'swrongwiththeinternet"
注意最后一個代碼塊:變量名_被作為通配符并必定會匹配成功。如果沒有case語句匹配成功,則不會執(zhí)行任何分支。
使用|(or)在一個模式中可以組合多個字面值:
case401|403|404:
return"Notallowed"
模式的形式類似解包賦值,并可被用于綁定變量:
#pointisan(x,y)tuple
matchpoint:
case(0,0):
print("Origin")
case(0,y):
print(f"Y={y}")
case(x,0):
print(f"X={x}")
case(x,y):
print(f"X={x},Y={y}")
case_:
raiseValueError("Notapoint")
請仔細(xì)研究此代碼!第一個模式有兩個字面值,可以看作是上面所示字面值模式的擴(kuò)展。但接下來的兩個模式結(jié)合了一個字面值和一個變量,而變量綁定了一個來自目標(biāo)的值(point)。第四個模式捕獲了兩個值,這使得它在概念上類似于解包賦值(x,y)=point。
如果使用類實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu),可在類名后加一個類似于構(gòu)造器的參數(shù)列表,這樣做可以把屬性放到變量里:
classPoint:
x:int
y:int
defwhere_is(point):
matchpoint:
casePoint(x=0,y=0):
print("Origin")
casePoint(x=0,y=y):
print(f"Y={y}")
casePoint(x=x,y=0):
print(f"X={x}")
casePoint():
print("Somewhereelse")
case_:
print("Notapoint")
可在dataclass等支持屬性排序的內(nèi)置類中使用位置參數(shù)。還可在類中設(shè)置__match_args__特殊屬性為模式的屬性定義指定位置。如果它被設(shè)為(x,y),則以下模式均為等價的,并且都把y屬性綁定到var變量:
Point(1,var)
Point(1,y=var)
Point(x=1,y=var)
Point(y=var,x=1)
讀取模式的推薦方式是將它們看做是你會在賦值操作左側(cè)放置的內(nèi)容的擴(kuò)展形式,以便理解各個變量將會被設(shè)置的值。只有單獨(dú)的名稱(例如上面的var)會被match語句所賦值。帶點(diǎn)號的名稱(例如foo.bar)、屬性名稱(例如上面的x=和y=)或類名稱(通過其后的(...)來識別,例如上面的Point)都絕不會被賦值。
模式可以任意地嵌套。例如,如果有一個由點(diǎn)組成的短列表,則可使用如下方式進(jìn)行匹配:
matchpoints:
case[]:
print("Nopoints")
case[Point(0,0)]:
print("Theorigin")
case[Point(x,y)]:
print(f"Singlepoint{x},{y}")
case[Point(0,y1),Point(0,y2)]:
print(f"TwoontheYaxisat{y1},{y2}")
case_:
print("Somethingelse")
為模式添加成為守護(hù)項(xiàng)的if子句。如果守護(hù)項(xiàng)的值為假,則match繼續(xù)匹配下一個case語句塊。注意,值的捕獲發(fā)生在守護(hù)項(xiàng)被求值之前:
matchpoint:
casePoint(x,y)ifx==y:
print(f"Y=Xat{x}")
casePoint(x,y):
print(f"Notonthediagonal")
match語句的其他特性:
與解包賦值類似,元組和列表模式具有完全相同的含義,并且實(shí)際上能匹配任意序列。但它們不能匹配迭代器或字符串。序列模式支持?jǐn)U展解包操作:[x,y,*rest]和(x,y,*rest)的作用類似于解包賦值。在*之后的名稱也可以為_,因此,(x,y,*_)可以匹配包含至少兩個條目的序列,而不必綁定其余的條目。映射模式:{bandwidth:b,latency:l}從字典中捕獲bandwidth和latency的值。與序列模式不同,額外的鍵會被忽略。**rest等解包操作也支持。但**_是冗余的,不允許使用。
使用as關(guān)鍵字可以捕獲子模式:
case(Point(x1,y1),Point(x2,y2)asp2):...
將把輸入的第二個元素捕獲為p2(只要輸入是包含兩個點(diǎn)的序列)
大多數(shù)字面值是按相等性比較的,但是單例對象True,False和None則是按標(biāo)識號比較的。
模式可以使用命名常量。這些命名常量必須為帶點(diǎn)號的名稱以防止它們被解讀為捕獲變量:
fromenumimportEnum
classColor(Enum):
RED='red'
GREEN='green'
BLUE='blue'
color=Color(input("Enteryourchoiceof'red','blue'or'green':"))
match
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中學(xué)家長會方案中學(xué)家長會方案與流程
- 高級中式面點(diǎn)師試題庫+答案(附解析)
- 《保護(hù)校園環(huán)境衛(wèi)生從我做起》活動方案
- 網(wǎng)絡(luò)安全防護(hù)在智能安防的視頻內(nèi)容分析評估考核試卷
- 1月企業(yè)培訓(xùn)師模擬練習(xí)題含參考答案解析
- 北師大六年級下數(shù)學(xué)課件-小數(shù)點(diǎn)-北師大
- 不符合生活的設(shè)計(jì)缺陷分析
- 社會學(xué)理論與調(diào)查方法考核試卷
- 營養(yǎng)品生產(chǎn)流程與質(zhì)量控制要點(diǎn)考核試卷
- 拍賣行業(yè)公共服務(wù)創(chuàng)新模式探索考核試卷
- 四川省遂寧市射洪中學(xué)2025屆高三下學(xué)期三模化學(xué)試題(原卷版+解析版)
- 生物信息學(xué)中的序列比對與比對分析-全面剖析
- 2025-2030國內(nèi)干式真空泵行業(yè)市場發(fā)展現(xiàn)狀及競爭格局與投資發(fā)展前景研究報(bào)告
- 《關(guān)于進(jìn)一步強(qiáng)化食品安全全鏈條監(jiān)管的意見》解讀學(xué)習(xí)課件(2025年3月頒發(fā))
- 預(yù)防合同詐騙
- 王莊礦5.0Mt-a新井設(shè)計(jì) - 厚煤層回采巷道支護(hù)技術(shù)研究
- 2025年電力電子技術(shù)試題及答案
- 2025年安全生產(chǎn)考試題庫(安全知識)安全教育與培訓(xùn)試題冊
- ISO 37001-2025 反賄賂管理體系要求及使用指南(中文版-雷澤佳譯-2025)
- 第18課 清朝的邊疆治理 課件 七年級歷史下冊 人教統(tǒng)編版2024版
- 砭石療法與傳統(tǒng)中醫(yī)理論的關(guān)系及發(fā)展
評論
0/150
提交評論