코딩스토리/파이썬

파이썬 람다(lambda) 사용방법

Tech&Fin 2022. 5. 17. 16:54
반응형

 

목차 - 클릭하면 이동합니다.

     

    파이썬 람다(lambda)

    파이썬 코드를 보다보면 람다식(lambda)을 심심치 않게 발견할 수 있는데요. 람다식은 파이썬의 코드의 양을 줄여줄 수 있는 임시 함수라고 할 수 있습니다.

     

    # 함수 구현
    def calc_num(x, y):
    	return x + y
    # 람다식으로 표현
    lambda x, y: x + y

    위와 같이 람다식을 사용하면 별도로 함수를 def를 이용해 구현하지 않아도 사용하고 싶은 곳에서 임시로 사용할 수 있어서 코드의 전체적인 양을 줄일 수 있으며 여러줄로 구현된 코드를 깔끔하게 한줄 코딩으로 변경할 수도 있게 됩니다.

     

    또한 여러가지 파이썬의 다른 함수들과 함께 사용하면 원하는 결과를 간결한 코드로 얻을 수 있기 때문에 실전에서도 자주 사용되고 있어 알아두면 여러모로 쓸모가 있는 구문입니다.

     

    람다식(lambda) 사용하기

    람다식 기본 구문

    lambda x: x + 2

    lambda 식은 lambda 키워드 뒤에 콜론(:)으로 구분하여 왼쪽에는 바인딩 되는 변수를 오른쪽에는 변수를 가지고 실행할 본문을 작성하게 됩니다.

     

    해당 람다식에 1이라는 변수를 입력하게 되면 1(변수) : 1 + 2(본문) = 3을 리턴하게 됩니다.

     

    람다식 함수명 정하기

    # 람다식 이름 정하기
    lambda_name = lambda x, y: x + y
    
    # 람다식 호출
    print(lambda_name(1, 2))

    람다식은 임시로 사용할 수 도 있지만 함수명을 정해서 재사용도 가능합니다.

     

    def sum_nums(x, y):
        return x + y
    
    # 람다식 호출
    print(sum_nums(1, 2))

    해당 람다식은 위와 같은 함수로 구현할 수도 있지만 람다식을 사용하는 것이 불필요한 return 같은 문구를 쓰지 않아도 되어 더 간결합니다.

     

    람다식의 실전 활용

    사실 람다식은 위의 같은 기본 예제에서 살펴본 방법을 사용하기 보다는 다른 파이썬 함수들과 함께 사용할 때 더 빛을 발합니다. 아래에서 몇 가지 유용한 함수들과 함께 람다식을 사용하는 방법에 대해서 살펴 보겠습니다.

     

    filter() 함수와 람다식

    filter(function, iterator)

    파이썬 내장 함수중에 리스트에서 원하는 조건만 보여주기 위한 필터 함수가 있습니다.

     

    필터 함수는 첫 번째 인자에 필터를 처리할 함수를 입력 받고 두 번째 인자로는 반복 가능한 값을 받게 됩니다. 즉 반복 가능한 값, 예를 들면 리스트를 입력받아 첫 번째 인자의 함수를 실행하여 참인 결과만 리턴하게 됩니다.

     

    만약 1부터 10으로 이루어진 리스트 중에 5보다 작은 값들만 필터링 하고 싶은 경우 람다식을 사용하지 않고 아래와 같이 구현할 수 있습니다.

    # 1부터 10까지 리스트
    list_nums = list(range(1, 11))
    print(list_nums)
    
    # 5보다 작으면 참을 리턴하는 함수
    def filter_func(x):
        if x < 5:
            return True
        else:
            return False
    
    # 필터 처리된 리스트 결과
    filtered_list_nums = list(filter(filter_func, list_nums))
    print(filtered_list_nums)
    실행결과
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    [1, 2, 3, 4]

    위와 같이 1 부터 10까지 반복 가능한 개체로 이루어진 리스트에서 5보다 작은 값들만 필터링하여 새로운 리스트를 만들어 낼 수 있습니다.

     

    반응형

     

    하지만 람다식을 사용하면 아래와 같이 코드가 훨씬 간결해 집니다.

    # 1부터 10까지 리스트
    list_nums = list(range(1, 11))
    print(list_nums)
    
    # 필터 처리된 리스트 결과(람다식 사용)
    filtered_list_nums = list(filter(lambda x: x < 5, list_nums))
    print(filtered_list_nums)
    실행결과
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    [1, 2, 3, 4]

    위와 같이 람다식을 사용하면 def를 이용한 별도의 함수 구현없이 임시로 filter의 첫 번째 인자에 람다식으로 구현한 임시 함수를 전달하고 그 결과를 리턴받을 수 있습니다.

     

    map() 함수와 람다식

    map(function, iterator)

    파이썬의 내장 함수인 map은 filter와 유사하게 사용되며 반복 가능한 객체를 function에 실행하여 결과를 리턴해 주는 역할을 합니다. 예제를 통해 살펴 보겠습니다.

     

    # 1부터 10까지 리스트
    list_nums = list(range(1, 11))
    print(list_nums)
    
    # 제곱을 리턴하는 함수
    def map_func(x):
        return x ** 2
    
    # 처리된 리스트 결과
    mapped_list_nums = list(map(map_func, list_nums))
    print(mapped_list_nums)
    실행결과
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

    위의 예제는 1 부터 10까지의 리스트의 요소들을 모두 제곱 값으로 변환하는 예제 입니다. 마찬가지로 람다식을 사용하면 매우 간결하게 수정할 수 있습니다.

     

    # 1부터 10까지 리스트
    list_nums = list(range(1, 11))
    print(list_nums)
    
    # 처리된 리스트 결과(람다식 사용)
    mapped_list_nums = list(map(lambda x: x**2, list_nums))
    print(mapped_list_nums)
    실행결과
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

     

    정리

    파이썬 내장 함수들을 사용하다보면 인자로 함수(function)을 받는 것들이 꽤 있는데요. 이때 복잡하지 않은 간단한 함수는 람다식을 사용하여 작성하면 코드를 간결하게 만들 수 있습니다.

     

    하지만 코드는 다른 사람이 봤을 때 가독성이 떨어지는 경우 유지보수가 어렵기 때문에 이해하기 힘든 수준으로 축약해 놓는 것은 바람직하지 않습니다. 가독성을 유지하는 수준에서 람다식을 잘 활용하여 간결하면서도 이해하기 쉬운 코드를 작성하는 연습을 하시면 좋을 것 같습니다.

     

    테크앤핀에서 진행중인 프로젝트에서도 람다식을 많이 사용하고 또 사용할 예정이오니 오늘 살펴본 내용을 이해하시면 추후 프로젝트 코드를 이해하시는데 도움이 되실 것 같습니다.

     

    현재 비트코인 자동매매 프로그램의 새로운 버전을 제작중에 있습니다. 어느정도 포스팅할 단계에 들어서면 차근차근 포스팅 하면서 조금 더 편리하게 사용 가능한 비트코인 자동매매 프로그램을 공유해 드릴 수 있도록 하겠습니다.

     

    블로그를 구독하면 소식을 조금 더 빨리 받아 보실 수 있습니다. 감사합니다.

    반응형