2012-08-10 4 views
5

방금 ​​Racketpattern matching 기능이 있습니다. 매우 강력합니다.파이썬에서 패턴 매칭 기능이 있나요?

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

파이썬에서 비슷한 구문 설탕이나 라이브러리가 있습니까?

답변

3

없음 파이썬의 패턴 매칭은 다음과 같이 풀고 만 반복 가능하고, 거기 없다 :

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

또는 함수 정의에

:

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

:

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

또는 파이썬 3

그러나 패턴 매칭을 실현하는 external libraries이 있습니다.