스위치 문을 교체품을 파이썬?
I want to 고정된 값을 반환하는 함수를 작성할 Python 의 값에 따라 서로 다른 입력 색인입니다.
꼭 이래야겠어요 다른 언어로 사용할 수 있지만, 파이썬 나타나지 않을 경우 '스위치' 또는 '' 기술서임을 투명지에 '스위치' 발표했다. 파이썬 솔루션뀉뀉뀉뀉 이 시나리오에서의 권장됨 어떤 것이 있습니까?
1719
44
사전을 사용할 수 있습니다.
39 와 같은 경우 사전에 설정값으로 you& 사용할 수 있습니다; d ['프레젠테이션이든 (키 [, 기본])'] (https://docs.python.org/2/library/stdtypes.html # 딕트리제) 방법:
39, ve i& 좋아했잖아 그렇게 항상 이렇게
[From here] (http://blog.simonwillison.net/post/57956755106/switch)
또 사전에 대한 서버리스 (nsr/res 브트와, I really like), 스위치 / 케이스 / 만약 다른 엘리프 얻을 수 있는 기본 기능을 사용할 수도 있습니다.
이 과정은 동일하지 않은 채 실패로 끝나다 전환하십시오 / 사례 - 것만큼 쉽게 끕니까 분할합니다 있을 수 없습니다. 기술서임을 있지만, 더 복잡한 테스트 할 수 있습니다. 그 형식은 네스트된 ifs, 비록 that& # 39 에 비해 괜찮게 시리즈를 보면 어떤 것이 더 가깝다.
제가 제일 좋아하는 파이썬 레시피 스위치 / 비유하사:
짧고 간단한 예를 들어 시나리오에서와.
비교할 때, 11+ 줄의 C 코드:
여러 변수 튜플을 사용하여 지정할 수도 있습니다.
사용법:
테스트:
제가 제일 좋아하는 하나는 정말 잘 [레시피] (http://code.activestate.com/recipes/410692/). # 39 you&, ll really like it. # 39 에 가장 가까운 it& I& # 39 한 경우, ve seen, 특히 실제 스위치에서도 제표를 피쳐들입니다.
"'파이썬 클래스 스위치 (객체): 데프 init (자체, 가치): 셀프리발루 = value 셀프스폴 = False
데프 iter (self): ";;;; 방법을 한 번 관심용 stop" " " " 반품해야 일치시킵니다 ". 일드 셀프리마치 스토피테라티온 마련한다.
데프 해당되어서는 (자체, * args): " ";;;; " " suite" 로켈이 을입력할 여부를 나탸내도록 ". 만약 셀프스폴 방관하겠나 args: 진정한 반품하십시오. 에서 엘리프 셀프리발루 args: # 변경할 v1.5, 아래 참조 셀프스폴 = True 진정한 반품하십시오. 다른: 거짓값 반품하십시오. "'
39 의 here& 예:
"'파이썬
다음 비유하사 의 정확한 사전, 꽤 많은 활용
하지만 이에 대해 단순한 포함되어 있다. 참고로 제표를 포함할 수 있습니다
각 제품입니다.
39, & # 39 ten&, v =
사건에 대한 스위치 (v): 경우 (& # 39, one& # 39;): 인쇄하십시오 1 브레이크 경우 (& # 39, two& # 39;): 인쇄하십시오 2 브레이크 경우 (& # 39, ten& # 39;): 10 인쇄하십시오. 브레이크 경우 (& # 39, eleven& # 39;): 11 인쇄하십시오. 브레이크 경우 (): # # 39, & # 39, 만약 True& 생략하십시오 조건이거나 그냥 기본 할 수 있다. " ", 인쇄, 무언가!
# 39, ll 정지점을 분할하려면 임무야, 어쨌든 it& 필요는 없습니다.
분할합니다 최대한 많이 볼 수 있지만, 여기에 사용된 것은 마치 실제 심장처럼
엘리프 일반적으로 더 좋은 것처럼 간단한.
빈 제품군 구문 오류와 도왔으매 의도적 스루 가을 간주된다.
# 39, & # 39 pass& 포함해야 합니다.
39, & # 39 z&, c =
사건에 대한 스위치 (c): 경우 (& # 39, a& # 39;): # 나머지 suite 비워집니다 전달하십시오 경우에만 필요합니다 경우 (& # 39, b& # 39;): 패스
.
경우 (& # 39, y& # 39;): 패스 경우 (& # 39, z& # 39;): " ", 인쇄, c 는 소문자화! 브레이크 경우 (& # 39, A& # 39;): 패스
.
경우 (& # 39, Z& # 39;): " ", 인쇄, c 는 대문자화! 브레이크 경우 (): # 기본 내가 어떤 캜 무서웠느뇨 " " 인쇄하십시오 몰라;;
권고하는 대로 따라 확장하십시오 피에르 쿠엔텔 수도 있습니다
# 39, & # 39 기본 기능을 case&. 기술서임을 일치시켜 복수
사례 한 샷. 이 같은 작업을 크게 보험급부금
대문자화 / 소문자화 위 예제:
가져오기의 구체화하십시오 c = A& # 39, & # 39. 사건에 대한 스위치 (c): 경우 ( 스트린g. 로르카스): # 를 인수로 기록하십시오 꺼내기 " ", 인쇄, c 는 소문자화! 브레이크 경우 (* 스트라이지우퍼케이스): " ", 인쇄, c 는 대문자화! 브레이크 경우 (& # 39;! & # 39, & # 39, & # 39, & # 39, # 39 .&?;;): # qic 반군지역 스타일 또한 일반 인수 c 는 " 인쇄하십시오 마디였나 종단기! "; 브레이크 경우 (): # 기본 내가 어떤 캜 무서웠느뇨 " " 인쇄하십시오 몰라;; "'
"'파이썬 class Switch: 데프 init (자체, 가치): 셀프리발루 = value
데프 enter (self): 자체 반품하십시오.
데프 exit (자체 mm_mail_doc., 가치, 역추적):
복귀하십시오 거짓값 역추적 발생할 수 있습니다
데프 call (자체, * 값): 의 값을 셀프리발루 반품하십시오.
에서 datetime 가져오기의 datetime
스위치 (다테타임스토데이 스위크데이 () ()) 를 통해 사례: 경우 (0):
스위치 기본 사용법
보기인쇄 (" 그러하매 much." 월요일 싫다;;) 여기서 필요한 분할합니다 # 참고 꾨т 臾몄젣媛? 엘리프 케이스 (1.2):
여러 조건을 (한 선) 이 스위치에서는 지원한다.
보기인쇄 (" 될 경우, 는 주말 " 여기서요?;) 엘리프 케이스 (3.4): 보기인쇄 (,) 는 지난 주말 " near.") 다른:
(기본값) 이 발생할 수 있습니다
보기인쇄 (# 39 의 gnu. 이따봐 " Let& ";) # # 39 Didn& t 览侩 荤례 예를 들기 위해 선정된 것입니다. "'
I learned from # 39 의 파이썬 코드를 패턴을 there& 있는 것을 보면 안타깝다.
필요하면 언제든지 사용할 수 있습니다) 에 발송하십시오 증표지 및 실행 코드를 ehas. '시스템' 에 '상태로 state 방법, 그리고 발송하십시오 셀f.국가' 했습니다. 이 스위치에서는 기본 클래스 정의 '와' 에서 수 있는 유일한 방법은 do 변수를 확실하게 연장했다. # 39 의 방법 ',' t 경우가 너회가 won& 갖추지 do_ 기본 클래스.
Edit: 얼마나 정확하게 에로남이네 used
헬리콥터 '에서' 와이어) 의 경우, smtp 받을 수 있습니다. 관련 코드 ("에서 twisted/mail/smtp.py '의 경우, 수정되었음) 모양입니다
39, & # 39 'll 수신한다는 you&. Foo.bar.com & # 39, 헬리콥터 ' (또는 너회가 지정값이 프레젠테이션이든' & # 39, & # 39, QUIT& # 39, '또는' 크프트 다음과 같이 사용된다. # 39 foo&; '). 이는 토큰 화 '에 따라 부품' (foo.bar.com) ' [& # 39, & # 39,, helo& # 39, & # 39]'. 실제 메서드입니다 조회 이름님은 수행됨을 "에서 부품 [0] '.
(원래 방법은 eschweiler-clarke 'stateCOMMAND', 사용하기 때문에 동일한 패턴을 구현할 수 있는 상태, 즉 ' (자체, & # 39, # 39, state& 그레타르 머시닝할 + 셀프리모데) ')
39, s, t want to say you don& let& # 39 값을 반환하는 메서드입니다 사용할 수 있지만, 그냥 뭔가 변경하십시오 객체에 대한. 여기에 명시된 외곽진입 사용하여 다음과 같습니다.
여기에 어떻게 평가하고 있는 모든 방법을 사전이므로 에로남이네 파이썬 그래서 a& # 39, & # 39, 경우에도 값은 객체에는 증분됩니다 and 감소합니다 의해 x 받게 된다.
해결책:
그래서 바뀌엇어요 확보하십시오 포함된 기능과 해당 인수만. 즉, 오직 함수 포인터 및 인수 목록이 프레젠테이션이든 반환되었습니다, not 평가를 받았다. # 39, & # 39 result&. 그럼 평가하여 반환되었습니다 함수 호출.
여기서 잠깐 드롭합니다 i& # 39 m, 제 2 센트. 그 이유는 좁히어 isn& # 39 의 경우, t) 의 원리를 & # 39 는 파이썬 inet6.0, switch 문 / 파이썬 때문에 길을 something& # 39, 하나만 수행할 수 있다. 그래서 명백하게 다양한 방법을 통해 다시 나올 수 있지만, 이것은 스위치 / 케이스 기능을 수행하기 길을 if / 파이썬 엘리프 chunghwa. ie
난 그냥 여기 한 지지자가 상대방 주자가 후보가 됐을 때 느낀 PEP 8 됐다. Python 은 그 중 가장 아름다운 것에 대해 단순성과 우아. 즉, 우리, 하나 등 8 가지) 에 의해 pep 파생됨 " there& # 39 의 올바른 방법으로 하나만 something".
에 따라 확장하는지 " 딕트 switch"; 발상이다. 사용하려면 단축시킵니다 기본값입니다 스위치였습니다:
복잡한 함수를 사용하여 검색표 경우 사전에 차단할 경우 볼 수 있습니다.
39 haven& 경우, 그 이전에 이런 일을 안 좋은 방법이 앞당기세요 사전에 정확히 어떻게 보고 각 함수의 클린업합니다 디버거를 보인다.
참고: &Quot 못하며창조된 not " 사용하여, (); 이를 통해 사전 검색 기능이 있는 케이스 / 또는 / 경우 사전에 호츨 각 블록 생성됩니다. 이 때문에 각 함수를 사용하여 한 번 할 때만 너희에게베풀어진 호출하십시오 해시보다 스타일입니까 조회.
39, re 검색: 추가 기술서임을 you& 경우, 파이썬 모듈 기반으로 하는 것처럼, 나는 " switch" 연장시킵니다 파이썬. # 39 의 [발견하다] [1] 로 하는 it& " 강화됨 구조를 Python"; # 39 의 파이썬 2.x 및 파이썬 3.x 및 it& 모두 사용할 수 있습니다.
예를 들어, 이 경우 다음과 같은 코드를 switch 문으로 의해 수행될 수 있다.
다음과 같이 사용할 수 있는
그래서 그 변환하기에 발견하다 파이썬 다음과 같습니다.
[1]: https://web.archive.org/web/20111103124355/http = en& 액화천연가스 (lng), pg) = 19 ://elp.chronocv.fr/articles.php?
내가 공통 스위치 구조를 있음을 발견했다.
python 에서 다음과 같이 표현될 수 있다.
또는 더 포맷되었을 인할지 운행에서어떠한:
대신 성명을 통해, 파이썬 버전은 있는 값으로 표현식에서는 평가하고 있다.
난 내가 찾던 어느 위치에든 간단한 답을 찾을 수 없는 didn& # 39, 구글 검색. 하지만 내가 생각 아웃해야 겁니다. # 39 의 it& 정말 아주 간단합니다. 아마 몇 긁힘 방지 else& 방문한 적은 게시물로의 했다 (it), # 39 의 헤드입니다. 중요한 것은 단순히 in" "; 및 튜플을. 다음은 switch 문 등 함께 비헤이비어를 실패로 끝나다 무순서 실패로 끝나다.
기능:
여기에 대답을 할 수 있는 가장 오래된 것 때문에 특히 수락됨 수준들과 규모의 주지하십시오.
첫째, 공식 [파이썬 FAQ] (https://docs.python.org/3/faq/design.html # 있을 수 없는 이유는 스위치이거나 case 문에 파이썬) 이 있으며, 간단한 경우에 대한 '및' 닫히지만 권장하는 '엘리프 체인 딕트' 대규모 또는 보다 복잡한 건. 또한 일련의 '' 제안됩니다 visit_ 서버리스 (사용하는 많은 서버 프레임워크와도 스타일) 의 일부 있었다.
Faq 를 인식되었다 [PEP 275] (https://www.python.org/dev/peps/pep-0275/) 를 얻기 위해 작성한 공식 한번만 진단트리 추가에 대한 c 스타일 스위치였습니다 명령문입니다. 하지만 그 모습을 실제로 우회된 수 있으며, 그것은 오직 거절됨 따라 별도의 공식 제안, 파이썬 3 [PEP 3103] (https://www.python.org/dev/peps/pep-3103/). Answer 는 물론 노하지만하지 pep 링크를 가질 경우 추가 정보를 두 가지 또는 you& # 39, re 관심이 쏠리고 있다.
한 심아이엔큐 다가와 여러 번 할 수 있고, 실제 모습을 볼 수 있는 경우에도 275 전송되었기 컷아웃할 표시됨과 권장안을) 가 바로 그런 경우 8 줄의 코드를 처리할 수 있도록 함으로써, re 상행담관염이라고 괴롭혔다 you& # 39 건, 6 선 you& # 39 에서, C, d 가 4 vs. Bash, 넌 언제나 쓴:
39 이 isn& 있지만, s, t 가 아니라 # 39 정확히요 권장됨 PEP 8 it& 판독값 너무 유니디머티스.
이후 이 문제를 놓고 십 년 이상의 경우, PEP 3103 거부되었고, 심지어 약간 더 강력한 검색하기를 버전을 제표를 c 스타일, 는 중부아프리카붉은콜로부스의 죽은입니다. 누구나 it up on 파이썬 한다. 때마다, 또는 - re # 39 라고 누구이뇨 개발, they& 이전 결정을 내렸다.
그러나 이후 몇 년마다 발생할 수 있다는 생각을, 특히 전체 ml 스타일 패턴 매칭 같은 언어를 신속하고 러스트 채택한 것이 특징이다. 문제는 it& # 39 의 대수적 데이터 형식을 사용할 수 있도록 열심히 훨씬 아웃해야 패턴 매칭 없이. 한편, 그동안 이 생각에 # 39, 귀도 sympathetic nobody& 파이썬 잘 끼울 수 있는 방안을 내놓아야 한다. 2014년 (rec.601 읽을 수 있는 [내 스트라우먼] (http://stupidpythonideas.blogspot.com/2014/08/a-pattern-matching-case-statement-for.html) 의 예이다.) 바꿀 수 있는 '이' 에 대한 제안서를 다타클레스 3.7 및 일부 산발적인 이넘 처리할 수 있는 다양한 종류, 더 강력한 '합' 제안서를 기술서임을 로컬 서로 다른 종류의 바인딩 (예: [pep 3150] (https://www.python.org/dev/peps/pep-3150/) 또는 설정되었습니다 현재 논의되고 있는 - 아이디어 제안). # 39, hasn& 얻게된다면 있으나 아직까지 없다.
또한, 이는 "에서 모든 것을 가끔 제안서를 펄 6 스타일 일치 '를 기본적으로 뒤범벅 엘리프 regex 를 단일 발송하십시오 스위칭이란 유형.
이 솔루션은 내가 사용:
2 명의 솔루션을 결합한 게시하기를 임무야, 이는 비교적 쉽게 읽고 汲摹窍妨绰 설정값으로.
여기서
람다 x: 것가운데 '" 보인다. 또한 사용하고 있는 x 'x', '= 23 딕트 2" -
39 의 기본 '에서는 딕트 doesn&, t, 람다 x: " 찾을 수 있습니다. x = x - 22" 44 '을 (를)', '.