2012-08-10 12 views
5

Ho appena trovato la funzione pattern matching in Racket molto potente.Esistono funzioni di corrispondenza dei modelli in Python come questo?

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

C'è una sintassi simile di zucchero o libreria per farlo in Python?

risposta

3

No non c'è, pattern matching di pitone è iterabile solo il disimballaggio del genere:

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

O in definizione di funzione:

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

O in Python 3:

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

Ma ci sono alcuni di external libraries che realizzano la corrispondenza del modello.

Problemi correlati