-
Python/람다식의 다른 적용: if문 대체코딩/Python 2024. 3. 8. 16:56728x90
람다식의 확장
함수
여기 세 함수가 있다. 입력값에 100,200,300을 더하는 함수다.
def p100(n): re = n + 100 return re def p200(n): re = n + 200 return re def p300(n): re = n + 300 return re
if문
만일 이 함수들을 케이스로 사용한다면 if..elif..else를 쓸 것이다.
q = 1 if q == 1: ans = p100(q) elif q == 2: ans = p200(q) elif q == 3: ans = p300(q) else: print('No answer')
여기까지는 일반적인 방법이다.
람다식
이제 람다식과 리스트를 결합해서 케이스를 대체한다.
cmd_l = [lambda n: p100(n), lambda n: p200(n), lambda n: p300(n)] ans_l = cmd_l[0](q)
위의 if문보다 훨씬 간결하다. 람다식의 지연기능을 이용해서 if문을 단축시켰다.
여기 또 다른 더 짧은 예가 있다.
cmd2 = lambda n: [p100(n), p200(n), p300(n)] ans = cmd2(q)[0]
람다를 리스트 앞에 위치시켜 더욱 간결하게 만들었다. 외형적인 기능은 같다.
두 람다식의 결과는 같지만 내부적으로는 큰 차이가 있다. 첫번째 람다식은 각 함수에 개별적으로 적용되어 독립적으로 작용하고 두번째는 모든 함수를 거쳐 적용된다. 이 뜻은 앞의 것은 곧바로 적용될 함수를 찾아가서 프로세스를 끝내지만 두번째는 람다가 적용된 모든 함수를 거쳐서 끝낸다. p100의 결과만 필요한데도 p200, p300까지 모두 거치고 프로세스가 끝난다.
그리고 결과를 구하는 형식을 보면 첫번째는 일반적인 방법처럼 함수명[인덱스](람다값)인데 두번째는 함수명(람다값)[인덱스]로 순서가 꺼꾸로다.
728x90'코딩 > Python' 카테고리의 다른 글
Python/PEP 8 – Style Guide for Python Code (0) 2024.03.10 Python/영문 국문 번역 자료 병합, 마크다운, HTML 태그 추가 (0) 2024.03.08 Python/정규식 HOWTO (0) 2024.03.04 Python/Enumerate()의 올바른 이해 (1) 2024.02.26 Python/Data 입력값, 인수, 변수 (1) 2024.02.11