Joh*_* Li 4 python tuples list pattern-matching python-3.10
使用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")
Run Code Online (Sandbox Code Playgroud)
使用my_fun([1])打印“tuple (1,)”调用该函数。
这种行为正确吗?
如果我明确匹配tuple((1, ))而不是(1,),它会按预期工作。
如果这不是解释器的错误,那么这种看似奇怪的行为背后的原因是什么?
\n\n\n与解包作业一样,元组和列表模式具有完全相同的含义,并且实际上匹配任意序列。从技术上讲,主题必须是一个序列。因此,一个重要的例外是\n模式不\xe2\x80\x99 匹配迭代器。另外,为了防止常见错误,\n序列模式不\xe2\x80\x99 匹配字符串。
\n
\n\n与可迭代拆包一样,我们不区分“元组”和“列表”表示法。
\n[a, b, c],(a, b, c)并且a, b, c都是等价的。\n虽然这意味着我们有冗余的符号,并且\n专门针对列表或元组进行检查需要更多的努力(例如 case\n )list([a, b, c])),但我们尽可能地模仿可迭代的解包。