这样的Python中是否有模式匹配函数?

Han*_*Sun 5 lisp python scheme pattern-matching racket

我刚刚发现Racket中模式匹配功能非常强大.

> (match '(1 2 3) [(list a b c) (list c b a)])

'(3 2 1)

> (match '(1 2 3) [(list 1 a ...) a])

'(2 3)

> (match '(1 2 3)
    [(list 1 a ..3) a]
    [_ 'else])

'else

> (match '(1 2 3 4)
    [(list 1 a ..3) a]
    [_ 'else])

'(2 3 4)

> (match '(1 2 3 4 5)
    [(list 1 a ..3 5) a]
    [_ 'else])

'(2 3 4)

> (match '(1 (2) (2) (2) 5)
    [(list 1 (list a) ..3 5) a]
    [_ 'else])

'(2 2 2)
Run Code Online (Sandbox Code Playgroud)

在Python中是否有类似的语法糖或库?

Fed*_*lev 3

不,没有,python的模式匹配只是可迭代的解包,如下所示:

>>> (x, y) = (1, 2)
>>> print x, y
1 2
Run Code Online (Sandbox Code Playgroud)

或者在函数定义中:

>>> def x((x, y)):
    ...
Run Code Online (Sandbox Code Playgroud)

或者在Python 3中:

>>> x, *y = (1, 2, 3)
>>> print(x)
1
>>> print(y)
[2, 3]
Run Code Online (Sandbox Code Playgroud)

但是有一些外部库可以实现模式匹配。