<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
pass
語句不執行任何操作。語法上需要一個語句,但程式不實際執行任何動作時,可以使用該語句。
例如:
>>> while True: ... pass # Busy-wait for keyboard interrupt (Ctrl+C) ...
下面這段程式碼建立了一個最小的類:
>>> class MyEmptyClass: ... pass ...
pass
還可以用作函數或條件子句的預留位置,讓開發者聚焦更抽象的層次。此時,程式直接忽略 pass
:>>>
>>> def initlog(*args): ... pass # Remember to implement this! ...
A match
statement takes an expression and compares its value to successive patterns given as one or more case blocks. This is superficially similar to a switch statement in C, Java or JavaScript (and many other languages), but it can also extract components (sequence elements or object attributes) from the value into variables.
最簡單的形式是將一個目標值與一個或多個字面值進行比較:
def http_error(status): match status: case 400: return "Bad request" case 404: return "Not found" case 418: return "I'm a teapot" case _: return "Something's wrong with the internet"
注意最後一個程式碼塊:“變數名” _
被作為 萬用字元 並必定會匹配成功。 如果沒有 case 語句匹配成功,則不會執行任何分支。使用 |
(“ or ”)在一個模式中可以組合多個字面值:
case 401 | 403 | 404: return "Not allowed"
模式的形式類似解包賦值,並可被用於繫結變數:
# point is an (x, y) tuple match point: 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 _: raise ValueError("Not a point")
請仔細研究此程式碼! 第一個模式有兩個字面值,可以看作是上面所示字面值模式的擴充套件。但接下來的兩個模式結合了一個字面值和一個變數,而變數 繫結 了一個來自目標的值(point
)。第四個模式捕獲了兩個值,這使得它在概念上類似於解包賦值 (x, y) = point
。
如果使用類實現資料結構,可在類名後加一個類似於構造器的參數列,這樣做可以把屬性放到變數裡:
class Point: x: int y: int def where_is(point): match point: case Point(x=0, y=0): print("Origin") case Point(x=0, y=y): print(f"Y={y}") case Point(x=x, y=0): print(f"X={x}") case Point(): print("Somewhere else") case _: print("Not a point")
可在 dataclass 等支援屬性排序的內建類中使用位置引數。還可在類中設定 __match_args__
特殊屬性為模式的屬性定義指定位置。如果它被設為 ("x", "y"),則以下模式均為等價的,並且都把 y
屬性繫結到 var
變數:
Point(1, var) Point(1, y=var) Point(x=1, y=var) Point(y=var, x=1)
讀取模式的推薦方式是將它們看做是你會在賦值操作左側放置的內容的擴充套件形式,以便理解各個變數將會被設定的值。 只有單獨的名稱(例如上面的 var
)會被 match 語句所賦值。 帶點號的名稱 (例如 foo.bar
)、屬性名稱(例如上面的 x=
和 y=
)或類名稱(通過其後的 "(...)" 來識別,例如上面的 Point
)都絕不會被賦值。
模式可以任意地巢狀。例如,如果有一個由點組成的短列表,則可使用如下方式進行匹配:
match points: case []: print("No points") case [Point(0, 0)]: print("The origin") case [Point(x, y)]: print(f"Single point {x}, {y}") case [Point(0, y1), Point(0, y2)]: print(f"Two on the Y axis at {y1}, {y2}") case _: print("Something else")
為模式新增成為守護項的 if
子句。如果守護項的值為假,則 match
繼續匹配下一個 case 語句塊。注意,值的捕獲發生在守護項被求值之前:
match point: case Point(x, y) if x == y: print(f"Y=X at {x}") case Point(x, y): print(f"Not on the diagonal")
match 語句的其他特性:
[x, y, *rest]
和(x, y, *rest)
的作用類似於解包賦值。 在*
之後的名稱也可以為_
,因此,(x, y, *_)
可以匹配包含至少兩個條目的序列,而不必繫結其餘的條目。{"bandwidth": b, "latency": l}
captures the"bandwidth"
and"latency"
values from a dictionary. Unlike sequence patterns, extra keys are ignored. An unpacking like**rest
is also supported. (But**_
would be redundant, so it is not allowed.)as
關鍵字可以捕獲子模式:case (Point(x1, y1), Point(x2, y2) as p2): ...
p2
(只要輸入是包含兩個點的序列)True
,False
和None
則是按標識號比較的。from enum import Enum class Color(Enum): RED = 'red' GREEN = 'green' BLUE = 'blue' color = Color(input("Enter your choice of 'red', 'blue' or 'green': ")) match color: case Color.RED: print("I see red!") case Color.GREEN: print("Grass is green") case Color.BLUE: print("I'm feeling the blues :(")
到此這篇關於python 中pass和match使用方法的文章就介紹到這了,更多相關python pass和match內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45