2012-08-10 16 views
5

Acabo de encontrar la característica pattern matching en Racket muy potente.¿Hay funciones de coincidencia de patrones en Python como esta?

> (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) 

¿Hay una sintaxis similar de azúcar o biblioteca para hacer eso en Python?

Respuesta

3

No, no hay, búsqueda de patrones de pitón sólo es iterable desembalaje así:

>>> (x, y) = (1, 2) 
>>> print x, y 
1 2 

O en función de la definición:

>>> def x((x, y)): 
    ... 

O en Python 3:

>>> x, *y = (1, 2, 3) 
>>> print(x) 
1 
>>> print(y) 
[2, 3] 

Pero hay algunos de external libraries que realizan la coincidencia de patrones.

Cuestiones relacionadas