我有一個data從 websocket 傳入的變數,我正在使用 match/case 來確定如何處理它。它以元組的形式出現,如下所示,但我想將這兩者都匹配。
data = ("foo", )
# or
data = ("foo", {"bar": 213})
有些情況我需要資料,有些情況我不需要。在我不需要它的情況下(即上面第一個元素是 foo 的情況)我只想基本上忽略第二個變數(如果它存在)。
這是我目前的做法,但我做錯了嗎?還是有更簡潔的形式?
match data:
case ["foo"] | ["foo", _]:
...
case ["baz", x]:
...
...
uj5u.com熱心網友回復:
與星號拆包一樣,帶有星號的變數(或下劃線)匹配零個或多個專案。所以以下將起作用:
data = ['foo']
match data:
case ['foo', *_]:
print('Matched')
它類似于常見的可迭代解包:
a, *b = [1]
assert a == 1
assert b == []
注意:它與您的原始代碼不同,因為['foo', {}, {}]也會匹配。正則運算式量詞沒有類似物?,因此“不超過一個”不能這樣表達。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/485508.html
標籤:Python python-3.x
上一篇:計算二叉樹的總和
下一篇:python中的多次調度
