일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Bestin
- 애플
- homebridge
- 힐스테이트 광교산
- 나스닥
- Home Assistant
- SK텔레콤
- raspberry pi
- 배당
- cluster
- 홈네트워크
- 오블완
- 현대통신
- 공모주
- 매터
- esp32
- MQTT
- 국내주식
- 월패드
- 해외주식
- Python
- Apple
- 미국주식
- Espressif
- 코스피
- RS-485
- matter
- ConnectedHomeIP
- 티스토리챌린지
- 파이썬
- Today
- Total
YOGYUI
Python::구조적 패턴 매칭 - 파이썬에서 switch/case문을?! 본문
파이썬 3.10에 마침내 C, C++의 switch/case문과 유사한 문법이 추가된다고 한다
PEP 634은 구조적 패턴 매칭(Structural Pattern Matching)이라 하여 switch/case문과 유사한 match/case 문법에 대한 내용을 담고 있다
해당 내용은 다음 기사에서 최초로 접했다 (3월5일 기사니 꽤 뒷북인 느낌 ㅎㅎ)
C, C++의 switch/case문과 달리 시퀀스, 매핑, 기본 자료형 및 클래스 객체 등 다양한 종류의 패턴에 대한 조건문을 짤 수 있다는 장점을 가지고 있다
Python 3.10.0은 2021년 3월 21일 현재 alpha 6 버전까지 릴리즈되었고, 10월 4일에 최종 버전이 릴리즈될 예정이라고 한다
이왕 본 김에 한번쯤은 써봐야되지 않겠나... 싶어서 알파버전(a6)을 한 번 설치해봤다
알파버전 설치 링크: www.python.org/downloads/release/python-3100a6/
허접한 코드를 작성해보자
def getPhoneCode(country: str) -> int:
match country.lower():
case "unitedstate":
return 1
case "france":
return 33
case "spain":
return 34
case "japan":
return 81
case "southkorea":
return 82
case _:
return -1
if __name__ == '__main__':
print(getPhoneCode("SouthKorea"))
print(getPhoneCode("France"))
print(getPhoneCode("UnitedState"))
print(getPhoneCode("China"))
In [1]:
Out[1]:
82
33
1
-1
C, C++ switch/case문의 default는 Python match/case문에서는 언더바( _ )로 처리할 수 있는 것 같다
다음과 같은 코드도 돌려봤다
def calculator(command: str):
match command.split(' '):
case ["add", str_num1, str_num2]:
n1, n2 = int(str_num1), int(str_num2)
print(f"{n1} + {n2} = {n1 + n2}")
case ["sub", str_num1, str_num2]:
n1, n2 = int(str_num1), int(str_num2)
print(f"{n1} - {n2} = {n1 - n2}")
case ["abs", str_num1]:
n1 = int(str_num1)
print(f"|{n1}| = {abs(n1)}")
case _:
print("Unknown Command")
if __name__ == '__main__':
calculator("add 1 2")
calculator("sub 4 3")
calculator("abs -5")
calculator("div 6 3")
In [2]:
Out[2]:
1 + 2 = 3
4 - 3 = 1
|-5| = 5
Unknown Command
이런 식으로 함수 반환값에 대한 패턴 일치 여부 조건 분기를 할 수 있다
단순히 상수 비교에 대한 분기문이라면 if/elif/else 문에 비해서 그다지 코드가 깔끔해진다던가하는 느낌은 못받았지만, 다음과 같이 객체 타입 비교 등 (특히 객체 패턴에 대한 분기)에 활용하면 코드 가독성을 확실히 높일 수 있지 않을까라는 기대를 할 수 있다
매칭 순서는 구체적(복잡한)인 매칭을 우선 처리하고 일반적(단순한)인 매칭은 나중에 처리하는 방식으로 구성해야 효과적이라고 한다
정식버전 출시되기까지 6달 정도 남았는데, 틈틈히 평소에 짜뒀던 코드 중에 match/case 문으로 변환했을 때 더 효과적일 구문이 있을까 고민해보면 재밌을 것 같다
'Software > Python' 카테고리의 다른 글
PyQt5 - QDoubleSpinbox 더블클릭 시 텍스트 전체선택 (0) | 2021.06.21 |
---|---|
PyQt5 - QTableWidget Column Header Label 가져오기 (0) | 2021.06.21 |
Python으로 순서도 그리기 (schemdraw) (0) | 2021.01.27 |
Flask - Dynamic Page Update (Ajax) (0) | 2021.01.10 |
Flask - extension을 이용한 HTTP 인증 절차 구현 (0) | 2021.01.08 |