Python에서 스위치 케이스 함수를 구현하는 방법은 무엇입니까? [2022]
게시 됨: 2021-01-08목차
소개
Python에서 이러한 복잡한 If-else 문을 작성하는 대안이 있는지 궁금해 한 적이 있습니까? 여러 'If' 문이 코드를 복잡하게 만드는 것을 원하지 않으면 코드에서 제어 흐름을 구현하는 더 깔끔하고 빠른 방법을 제공하는 Switch case 문을 사용하는 것을 고려해야 합니다. C++, Java, Ruby 및 기타 프로그래밍 언어와 달리 Python은 switch case 문을 제공하지 않지만 이 명령문이 작동하도록 하는 몇 가지 해결 방법을 제공합니다.
예를 들어 Python을 사용하면 다른 프로그래밍 언어의 Python Switch 케이스 문 처럼 작동하는 코드 조각을 만들 수 있습니다. 이 블로그의 뒷부분에서 switch-case 문을 구현하는 방법에 대해 자세히 알게 될 것입니다. 파이썬에 대해 더 자세히 알고 싶다면 데이터 과학 과정을 확인하십시오.
Python에서 Switch 문이란 무엇입니까?
일반적으로 스위치는 변수에 저장된 값을 테스트하고 해당하는 case 문을 실행하는 제어 메커니즘입니다. Switch case 문은 프로그램에 제어 흐름을 도입하고 코드가 여러 'if' 문으로 복잡해지지 않도록 합니다.
따라서 코드는 뷰어에게 세심하고 투명하게 보입니다. 프로그래머가 코드에서 제어 흐름을 구현하는 데 사용하는 훌륭한 프로그래밍 기능입니다. Switch case 문은 case 문에 지정된 값을 코드의 변수와 비교하여 작동합니다.
Python Switch Case 문을 구현하는 방법
C++ 또는 Java와 같은 언어로 항상 코딩해 왔다면 Python에 switch case 문이 없는 것이 이상할 수 있습니다. 대신 Python은 switch-case 문을 구현하기 위해 사전, Python 클래스 또는 Python 람다 함수와 같은 다양한 해결 방법을 제공합니다.
파이썬에서 switch case 문이 없는 정확한 이유를 알고 싶다면 PEP 3103 을 확인해야 합니다 .
이러한 대안에 대해 자세히 알아보기 전에 먼저 스위치 케이스 기능이 다른 프로그래밍 언어에서 일반적으로 어떻게 작동하는지 살펴보겠습니다.
아래 예에서는 C 프로그래밍 언어를 사용했습니다.
스위치(monthOfYear) { 사례 1: printf("%s", 1월); 부서지다; 사례 2: printf("%s", 2월); 부서지다; 사례 3: printf("%s", 3월); 부서지다; 사례 4: printf("%s", 4월); 부서지다; 사례 5: printf("%s", 5월); 부서지다; 사례 6: printf("%s", 6월); 부서지다; 사례 7: printf("%s", 7월); 부서지다; 사례 8: printf("%s", 8월); 부서지다; 사례 9: printf("%s", 9월); 부서지다; 사례 10: printf("%s", 10월); 부서지다; 사례 11: printf("%s", 11월); 부서지다; 사례 12: printf("%s", 12월); 부서지다; 기본: printf("잘못된 월"); 부서지다; } |
이제 Python 스위치 케이스 함수 대안 으로 더 나아가 이러한 대안이 예제의 도움으로 어떻게 작동하는지 이해하겠습니다.
읽기: Python에서의 취업 기회: 알아야 할 모든 것
사전 매핑 사용
다른 프로그래밍 언어에 익숙하다면 사전이 키-값 쌍을 사용하여 메모리에 개체 그룹을 저장한다는 것을 알고 있어야 합니다. switch-case 문의 대안으로 사전을 사용하는 경우 키-값 쌍의 키는 대소문자로 작동합니다.
다음 예는 사전을 사용하여 switch case 문의 구현을 보여줍니다. 여기서 우리는 그 해의 월을 출력하는 함수 month()를 정의하고 있습니다.
먼저 케이스 문을 작성하고 각 케이스에 대한 개별 기능을 작성하는 것으로 시작하십시오. 기본 케이스를 처리하는 함수를 작성해야 합니다.
def 1월(): "1월" 반환 def 2월(): "2월" 반환 데프 행진(): "행진"을 반환 데프 4월(): "4월" 반환 데프 메이(): "5월" 반환 데프 6월(): "6월" 반환 7월 정의(): "7월" 반환 데프 8월(): "8월" 반환 def 9월(): "9월" 반환 데프 10월(): "10월" 반환 데프 11월(): "11월" 반환 데프 12월(): "12월" 반환 def default(): "잘못된 월" 반환 |
다음으로 Python에서 사전 개체를 만들고 프로그램에서 정의한 모든 함수를 저장합니다.
스위처 = { 0: '1월', 1: '2월', 2: '행진', 3: '4월', 4: '할 수 있다', 5: '6월', 6: '7월', 7: '8월', 8: '9월', 9: '10월', 10: '11월', 11: '12월' } |
마지막으로 정수를 입력으로 받아들이고 사전 조회를 수행하고 해당 함수를 호출하는 스위치 함수를 프로그램에 만듭니다.
def 월(monthOfYear): 반환 switcher.get(monthOfYear, 기본값)() |
전체 코드는 다음과 같습니다.
def 1월(): "1월" 반환 def 2월(): "2월" 반환 데프 행진(): "행진"을 반환 데프 4월(): "4월" 반환 데프 메이(): ![]() "5월" 반환 데프 6월(): "6월" 반환 7월 정의(): "7월" 반환 데프 8월(): "8월" 반환 def 9월(): "9월" 반환 데프 10월(): "10월" 반환 데프 11월(): "11월" 반환 데프 12월(): "12월" 반환 def default(): "잘못된 월" 반환
스위처 = { 0: '1월', 1: '2월', 2: '행진', 3: '4월', 4: '할 수 있다', 5: '6월', 6: '7월', 7: '8월', 8: '9월', 9: '10월', 10: '11월', 11: '12월' } def 월(monthOfYear): 반환 switcher.get(monthOfYear, 기본값)() 인쇄(스위치(1)) 인쇄(스위치(0)) |
위의 코드는 다음 출력을 인쇄합니다.
2 월 1 월 |
더 읽어보기: 초보자를 위한 42가지 흥미로운 Python 프로젝트 아이디어 및 주제
파이썬 클래스 사용하기
switch-case 문을 구현하는 대신 Python 클래스를 사용할 수도 있습니다. 클래스는 속성과 메서드가 있는 개체 생성자입니다. 위의 동일한 예를 통해 더 자세히 이해해 보겠습니다. 여기에서는 Python 스위치 클래스 내부에 스위치 메서드를 정의합니다.
예시
먼저, 한 달을 인수로 사용하여 결과를 문자열로 변환하는 Python 스위치 클래스 내부에 스위치 메서드를 정의합니다.
클래스 PythonSwitch: def 월(자신, monthOf Year): 기본값 = "잘못된 월" return getattr(self, 'case_' + str(monthOf Year), 람다: 기본값)() |
참고: 위의 예에서는 키워드 람다와 getattr() 메서드의 두 가지를 사용했습니다.
- 우리는 람다 키워드를 사용하여 파이썬에서 익명 함수를 정의합니다. Lambda 키워드는 사용자가 잘못된 입력을 입력할 때 기본 함수를 호출합니다.
- getattr() 메서드는 Python에서 함수를 호출하는 데 사용됩니다.
이제 각 경우에 대한 개별 기능을 만듭니다.
def 1월(자신): "1월" 반환
def 2월(자신): "2월" 반환 데프 행진(자신): "3월" 반환
def 4월(자신): "4월" 반환
def may(자신): "5월" 반환
데프 6월(자신): "6월" 반환 def 7월(자신): "7월" 반환
데프 8월(자신): "8월" 반환
def 9월(자신): "9월" 반환 def 10월(자신): "10월" 반환
11월(자신): "11월" 반환
12월 데프(자체): "12월" 반환 |
전체 코드는 다음과 같습니다.
클래스 PythonSwitch: def 월(자신, monthOf Year): 기본값 = "잘못된 월" return getattr(self, 'case_' + str(monthOf Year), 람다: 기본값)() def 1월(자신): "1월" 반환
def 2월(자신): "2월" 반환
데프 행진(자신): "3월" 반환
def 4월(자신): "4월" 반환
def may(자신): "5월" 반환
데프 6월(자신): "6월" 반환 def 7월(자신): "7월" 반환
데프 8월(자신): "8월" 반환
def 9월(자신): "9월" 반환 def 10월(자신): "10월" 반환
11월(자신): "11월" 반환
12월 데프(자체): "12월" 반환 my_switch = PythonSwitch() 인쇄(my_switch.month(1)) 인쇄(my_switch.month(10)) |
위의 코드는 다음 출력을 인쇄합니다.
1 월 십월 |
확인: 인도의 Python 개발자 급여
결론
이 블로그에서는 switch-case 문, switch-case 문의 대안 및 사용 방법에 대해 배웠습니다. 위에서 설명한 것처럼 Python에는 내장형 스위치 케이스 기능이 없지만 항상 이러한 대안을 사용하여 코드를 깔끔하고 깨끗하게 보이게 하고 더 나은 성능을 얻을 수 있습니다.
데이터 과학에 대해 자세히 알아보려면 작업 전문가를 위해 만들어졌으며 10개 이상의 사례 연구 및 프로젝트, 실용적인 실습 워크숍, 업계 전문가와의 멘토링, 1 - 업계 멘토와 일대일, 400시간 이상의 학습 및 최고의 기업과의 취업 지원.
일반 사전과 Python 사전을 구분합니다.
Python 사전 또는 "Dict"는 정렬되지 않은 요소 컬렉션을 저장하는 데 사용되는 Python의 내장 데이터 구조입니다. 단일 값을 저장하는 다른 Python 데이터 구조와 달리 사전 데이터 구조는 모든 키가 고유한 키-값 쌍을 저장합니다. 키-값 쌍의 삽입 순서를 기억하지 않고 키를 반복합니다. 반면에 Ordered Dictionary 또는 OrderedDict는 키-값 쌍의 삽입 순서를 추적합니다. 또한 이중 연결 목록 구현으로 인해 Python의 일반 사전보다 더 많은 메모리를 소비합니다. 동일한 키를 삭제하고 다시 삽입하면 OrderedDict가 삽입 순서를 기억하므로 원래 위치에 삽입됩니다.
이름이 지정된 튜플의 어떤 작업으로 스위치 케이스에 사용하기 편리한 옵션입니까?
Python의 namedtuple은 다양한 작업을 수행합니다. 다음은 명명된 튜플이 수행하는 가장 일반적인 작업의 목록입니다. 명명된 튜플의 요소는 사전과 달리 인덱스로 액세스할 수 있습니다. 요소에 액세스하는 다른 방법은 키 이름을 사용하는 것입니다. make() 함수는 명명된 튜플을 반환합니다. _asadict() 함수는 매핑된 값으로 구성된 정렬된 사전을 반환합니다. _replace() 함수는 키 이름을 인수로 사용하여 매핑된 값을 변경합니다. _fileds() 함수는 지정된 명명된 튜플의 모든 키 이름을 반환합니다.
우리는 언제 데이터를 저장하기 위해 목록을 선호합니까?
Python 목록은 다음 시나리오에서 데이터를 저장하는 가장 좋은 데이터 구조로 간주됩니다. 목록은 데이터 유형이 다른 다양한 값을 저장하는 데 사용할 수 있으며 각각의 인덱스로 액세스할 수 있습니다. 요소에 대해 수학 연산을 수행해야 할 때 목록을 사용하면 요소를 직접 수학적으로 연산할 수 있기 때문에 목록을 사용할 수 있습니다. 목록의 크기를 조정할 수 있으므로 저장할 요소의 수를 확신할 수 없는 경우 데이터를 저장하는 데 사용할 수 있습니다. 목록 요소는 쉽게 변경할 수 있으며 집합 및 사전과 달리 중복 요소를 저장할 수도 있습니다.