-
Python/아름다운 람다식(Lambda Expression)과 지연 함수코딩/Python 2023. 5. 20. 23:46728x90
람다식(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'코딩 > Python' 카테고리의 다른 글
Python/Type hint 사용법 (0) 2023.12.20 [Python/재귀함수] 파이썬 재귀함수(Recursion): 반복의 아름다움과 함께하는 프로그래밍 (0) 2023.05.27 [Python] 문자열이나 배열을 뒤집는 방법 (0) 2023.05.03 [파이썬] inplace 사용법 (0) 2023.04.13 [파이썬] 코드의 함수화 또는 블럭화에 대해 ChatGPT와 대화 (0) 2023.04.12