Han*_*Sun 5 lisp python scheme pattern-matching 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中是否有类似的语法糖或库?
不,没有,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)
但是有一些外部库可以实现模式匹配。