ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python/아름다운 람다식(Lambda Expression)과 지연 함수
    코딩/Python 2023. 5. 20. 23:46
    728x90

    람다식(Lambda Expression)과 지연 함수

    람다식은 익명 함수를 생성하기 위한 간결하고 강력한 방법으로, 파이썬에서도 많이 활용된다.

    람다식

    람다식은 함수를 간결하게 표현하기 위한 방법. 일반적으로 함수를 정의하고 호출하는 과정을 거치지 않고, 한 줄로 함수를 표현할 수 있다. 람다식은 주로 고차 함수와 함께 사용되며, 함수를 인자로 전달하거나 반환하는 등의 유연한 프로그래밍을 가능하게 한다.

    구문

    lambda 매개변수: 표현식

    • lambda: 람다식을 정의하는 키워드.
    • 매개변수: 함수에 전달되는 입력값.
    • 표현식: 함수의 결과를 반환하는 식.

    지연 함수

    지연 함수는 람다식과 고차 함수를 결합한 개념으로, 함수의 계산을 필요한 시점까지 지연시키는 방식. 이는 특히 대량의 데이터를 다룰 때 유용하며, 메모리를 효율적으로 사용할 수 있다. 지연 함수는 주로 제너레이터(generator)와 함께 사용되며, 데이터의 스트림(stream)을 처리할 때 유용하다.

    람다식과 지연 함수의 활용 예제

    예제 1: 숫자 리스트의 제곱 계산하기

    numbers = [1, 2, 3, 4, 5]
    squared = map(lambda x: x**2, numbers)
    print(list(squared))  # 출력: [1, 4, 9, 16, 25]

    위의 예제에서는 숫자 리스트의 각 요소를 제곱하는 람다식을 사용. map 함수를 활용하여 리스트의 각 요소에 대해 람다식을 적용한 후, 그 결과를 리스트로 변환하여 출력. 이때 map 함수는 지연 함수로 동작하여 필요한 시점에 계산을 수행하며, 불필요한 계산을 최소화.

    예제 2: 무한 수열 생성하기

    evens = (x for x in range(2, 100) if x % 2 == 0)
    print(next(evens))  # 출력: 2
    print(next(evens))  # 출력: 4
    print(next(evens))  # 출력: 6

    위의 예제에서는 무한한 짝수 수열을 생성하는 람다식과 제너레이터를 사용. (x for x in range(2, 100) if x % 2 == 0)는 짝수 수열을 생성하는 람다식으로, 필요한 시점에 값을 생성하여 제너레이터를 통해 하나씩 출력.

    예제 3: 더블러

    def myfunc(n):
      return lambda a : a * n

    myfunc는 인자 n을 받아들이며, 람다식을 반환. 반환된 람다식은 인자 a를 받아들이고, a와 n을 곱한 값을 반환.

    즉, myfunc 함수는 람다식을 생성하여 반환하는 고차 함수(higher-order function). 이렇게 반환된 람다식은 n 값을 기억하고 있으며, 이후에 호출될 때 a와 n을 곱한 값을 반환.

    예를 들어, 다음과 같이 myfunc를 호출하고 반환된 람다식을 사용:

    mydoubler = myfunc(2)
    result = mydoubler(5)
    print(result)  # 출력: 10

    위의 예시에서 myfunc(2)를 호출하면 n에 2가 전달되고, 이에 대한 람다식이 반환. 그 후 mydoubler(5)를 호출하면 람다식이 실행되어 a에 5가 전달되고, 5와 2를 곱한 값인 10이 반환.

    람다식과 지연 함수의 장점

    • 간결함: 람다식을 사용하면 함수를 간결하게 표현할 수 있다.
    • 고차 함수와의 유연한 조합: 람다식은 고차 함수와 함께 사용하여 함수를 인자로 전달하거나 반환하는 등의 유연한 프로그래밍을 가능하게 한다.
    • 메모리 효율성: 지연 함수를 활용하면 필요한 시점까지 계산을 미룰 수 있어 메모리를 효율적으로 사용.
    728x90

    댓글

Designed by Tistory.