为什么 Python 将列表匹配为元组?



使用 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])调用函数会打印"元组 (1,)"。

这种行为正确吗?

如果我显式匹配tuple((1, ))而不是(1,),它会按预期工作。

如果这不是解释器的错误,那么这种看似奇怪的行为背后的原因是什么?

这记录在结构模式匹配下。

与解包作业一样,元组和列表模式恰好具有 相同的含义,实际上匹配任意序列。从技术上讲, 主题必须是一个序列。因此,一个重要的例外是 模式与迭代器不匹配。此外,为了防止常见错误, 序列模式与字符串不匹配。

和 PEP 635 -- 结构模式匹配:动机和基本原理

与可迭代解包一样,我们不区分">元组"和 ">列表"表示法。[a, b, c](a, b, c)a, b, c都是等价的。虽然这意味着我们有一个冗余的符号和检查 特别是对于列表或元组需要更多努力(例如list([a, b, c])),我们尽可能地模仿可迭代解包。

相关内容

  • 没有找到相关文章

最新更新