반응형
파이썬 3.12 의 'match' 기능 사용 방법 (패턴 매칭 기능)
파이썬 3.12에서의 match 문은 기존에 도입된 패턴 매칭 기능을 더욱 확장하고 강화한 기능입니다. match 문은 복잡한 조건에 따라 다양한 패턴을 매칭하여 코드를 더 간결하고 가독성 좋게 작성할 수 있게 해줍니다. 이는 특히 여러 가지 케이스에 따라 서로 다른 처리가 필요한 상황에서 매우 유용합니다.
match 문 기본 구조
기본 구조에서 value의 값에 따라 각기 다른 처리가 이루어집니다.
_는 와일드카드로, 어떠한 값이라도 매칭될 수 있는 기본 케이스를 나타냅니다.
def process(value):
match value:
case 1:
print("Matched the integer 1")
case "hello":
print("Matched the string 'hello'")
case [x, y]:
print(f"Matched a list with two elements: {x}, {y}")
case _:
print("Matched nothing specific")
파이썬 3.12에서의 주요 개선 사항
1. Guarded Patterns (조건부 패턴 매칭)
- 특정 패턴이 매칭될 때 추가적인 조건을 확인할 수 있도록 지원합니다. 이는 보다 세밀한 제어를 가능하게 합니다.
- 아래코드에서는 data가 {"type": "A", "value": x} 패턴과 일치하고, x가 10보다 클 때만 첫 번째 케이스가 매칭됩니다.
def process(data):
match data:
case {"type": "A", "value": x} if x > 10:
print("Type A with value greater than 10")
case {"type": "B"}:
print("Type B")
case _:
print("Unknown type or value")
2. AS Pattern (패턴의 부분 매칭)
- 패턴 매칭 중 일부 값을 변수에 할당하여 그 값을 사용하도록 할 수 있습니다.
- 여기에서는 data가 첫 번째 케이스와 일치하면, 매칭된 전체 데이터를 whole 변수에 저장하고 이를 출력할 수 있습니다.
def process(data):
match data:
case {"type": "A", "value": x} as whole:
print(f"Full data: {whole}, Value: {x}")
case _:
print("Unknown data")
3. Nested Patterns (중첩된 패턴)
- 패턴 매칭은 중첩된 구조에서도 사용할 수 있습니다. 복잡한 데이터 구조를 간단히 매칭할 수 있게 됩니다.
- 중첩된 사전 구조에서도 특정 키와 값을 쉽게 매칭하여 추출할 수 있습니다.
def process(data):
match data:
case {"type": "A", "details": {"key": k, "value": v}}:
print(f"Type A with key: {k} and value: {v}")
case _:
print("Unknown pattern")
4. Structural Pattern Matching
- 구조적 패턴 매칭을 통해, 리스트, 튜플, 사전과 같은 데이터 구조를 더 효율적으로 매칭할 수 있습니다.
- 특정 시퀀스의 구조를 매칭하여 조건에 따라 처리합니다.
def process(sequence):
match sequence:
case [1, 2, 3]:
print("Matched the sequence [1, 2, 3]")
case [_, _, 3]:
print("Matched a sequence ending with 3")
case _:
print("Did not match any known sequence")
반응형
match 문 사용 시 주의 사항
- 패턴 매칭 우선순위:
- 패턴은 위에서 아래로 순차적으로 평가됩니다. 따라서 더 구체적인 패턴을 위에 배치하고, 보다 일반적인 패턴을 아래에 두는 것이 좋습니다.
- 복잡한 데이터 구조의 매칭:
- match 문을 사용하여 복잡한 데이터 구조를 매칭할 때, 모든 가능한 패턴을 고려하는 것이 중요합니다. 매칭되지 않는 경우에는 _ 와일드카드를 사용하여 기본 케이스를 처리할 수 있습니다.
- 매칭 실패:
- 만약 패턴이 매칭되지 않으면, match 문은 다음 패턴으로 넘어가며, 최종적으로 어느 패턴도 매칭되지 않으면 기본 케이스가 처리됩니다.
match 문의 장점
- 코드 가독성: 복잡한 조건문을 간결하게 작성할 수 있어 코드의 가독성이 향상됩니다.
- 유연성: 다양한 데이터 구조를 쉽게 매칭할 수 있어 복잡한 조건 처리에서 유연하게 사용할 수 있습니다.
- 확장성: 새로운 조건이나 패턴을 쉽게 추가할 수 있어 유지 보수에 유리합니다.
match 사용 예제
request의 구조에 따라 각각 다른 응답을 반환하는 웹 요청 처리 시스템 예제 입니다.
def handle_request(request):
match request:
case {"method": "GET", "path": "/"}:
return "Handle home page"
case {"method": "POST", "path": "/submit"}:
return "Handle form submission"
case {"method": m, "path": p}:
return f"Unknown path {p} for method {m}"
case _:
return "Invalid request"
참고 자료
반응형
'코딩취미 > Python' 카테고리의 다른 글
파이썬 3.12의 "Buffer Protocol Improvements" 특징 : 메모리 사용 효율화 (0) | 2024.08.20 |
---|---|
파이썬 3.12의 Precise Garbage Collection 의 특징(메모리누수 방지) (0) | 2024.08.20 |
파이썬 3.12의 CPython 개선사항 정리 (Python 성능관련 CPython ) (0) | 2024.08.19 |
파이썬 3.12의 특징과 개선사항 정리 (0) | 2024.08.19 |
화면의 크기가 변하는 UI에서 위젯을 동일한 위치에 배치하는 방법 : QSpacerItem 와 addStretch 비교 (0) | 2024.08.14 |