ABOUT ME

Motor bike, bike rider; Surfski, Kayak paddler; Amature programmer; a dog and animal lover

Today
Yesterday
Total
  • Python/람다식의 다른 적용: if문 대체
    코딩/Python 2024. 3. 8. 16:56
    728x90

    람다식의 확장

    함수

    여기 세 함수가 있다. 입력값에 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

    댓글

Designed by Tistory.