簡體   English   中英

為什么 Python 將列表匹配為元組?

[英]Why Python matches a list as a tuple?

使用 Python 3.11.0a2+ 和以下代碼:

def my_fun(e):
    match e:
        case (1,):
            print("tuple (1,)")
        case [1]:
            print("list [1]")
        case _:
            print("I don't understand")

使用my_fun([1])調用 function 會打印“元組 (1,)”。

這種行為正確嗎?

如果我明確匹配tuple((1, ))而不是(1,) ,它會按預期工作。

如果這不是解釋器的錯誤,那么這種看似奇怪的行為背后的原因是什么?

記錄在結構模式匹配

與解包賦值一樣,元組和列表模式具有完全相同的含義,並且實際上匹配任意序列 從技術上講,主題必須是一個序列。 因此,一個重要的例外是模式與迭代器不匹配。 此外,為了防止常見錯誤,序列模式不匹配字符串。

並在PEP 635 -- 結構模式匹配:動機和基本原理

與可迭代拆包一樣,我們不區分“元組”和“列表”表示法。 [a, b, c] , (a, b, c)a, b, c都是等價的。 雖然這意味着我們有一個冗余的符號並且專門檢查列表或元組需要更多的努力(例如 case list([a, b, c])) ,但我們盡可能地模仿可迭代解包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM