파이썬 lambda 함수
파이썬 람다(lambda) 함수는 익명 함수(anonymous function)로서, 이름이 없는 간단한 함수를 정의하는 방법이다. 람다 함수는 lambda 키워드를 사용하여 생성되며 주로 한 줄로 간결하게 표현된다.
람다 함수의 기본 구문
lambda 매개변수 : 표현식
- lambda : 람다 함수를 시작하는 키워드
- 매개변수 : 람다 함수의 입력 파라미터를 나타낸다.
- 표현식 : 해당 람다 함수가 수행할 연산 또는 계산식을 나타낸다.
a = (lambda x,y : x + y)(20,9)
print(a)
29
실행 결과
람다 함수는 주로 간단한 연산 또는 함수를 정의할 때 사용되며, 함수를 일급 객체로 취급하는 파이썬의 특성을 활용한다. 이러한 람다 함수는 주로 함수를 인자로 전달하거나 변환하는 함수, 함수형 프로그래밍과 관련된 작업에서 유용하게 활용된다.
파이썬 lambda 함수의 목적
목적 |
내용
|
간편한 함수 정의 |
람다 함수를 사용하면 간단한 함수를 간결하게 정의할 수 있다. 함수를 작성하고 호출하는 데 번거로운 과정을 줄여준다. |
함수를 인자로 전달 |
람다 함수는 다른 함수에 인자로 전달할 수 있다. 이것은 함수를 다른 함수의 매개변수로 전달하여 동작을 커스터마이징하고 조작할 수 있게 해준다. |
함수형 프로그래밍 지원 |
람다 함수는 함수형 프로그래밍 패러다임을 지원하는 중요한 요소 중 하나이다. 이를 통해 함수를 first-class 객체로 다루고 함수 조합 및 고차 함수(하나 이상의 함수를 인자로 받는 함수)를 구현할 수 있다. |
간단한 작업 처리 |
람다 함수는 간단한 작업을 수행할 때 특히 유용하다. 불필요한 함수 정의를 피하고 코드를 간결하게 유지할 수 있다. |
데이터 변환 및 필터링 |
주로 map, filter, reduce와 같은 함수와 함께 사용하여 데이터를 변환하거나 필터링할 때 유용하다. |
인라인 함수 정의 |
필요한 곳에서 직접 함수를 작성하여 인라인으로 사용할 수 있다. |
람다 함수는 간단한 작업 및 익명 함수의 정의에 적합하며, 더 복잡한 작업을 수행하려면 일반적인 함수를 사용하는 것이 바람직할 수 있다.
파이썬 lambda 함수를 사용한 다양한 예제
데이터 변환 및 매핑
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x : x**2, numbers))
# 결과: [1, 4, 9, 16, 25]
람다 함수 lambda x: x ** 2는 각 숫자 x를 제곱하여 반환하는 예제이다. map() 함수의 결과는 map 객체이므로, list() 함수를 사용하여 squared에 저장한다. 이로써 제곱된 숫자들이 포함된 리스트가 생성된다.
데이터 필터링
numbers = [1, 2, 3, 4, 5, 6]
odd_numbers = list(filter(lambda x : x % 2 != 0, numbers))
# 결과: [1, 3, 5]
먼저 numbers라는 리스트가 정의된다. 이 리스트에는 1부터 6까지의 여섯 개의 숫자가 포함되어 있고 filter() 함수를 사용하여 numbers 리스트의 각 요소를 필터링하고, 조건을 만족하는 숫자만 남기는 람다 함수를 적용한다.
람다 함수의 과정은 다음과 같다.
- 람다 함수 lambda x : x % 2!= 0은 주어진 숫자 x가 홀수인지를 확인하는 조건을 나타낸다. 숫자가 짝수이면 x % 2!= 0은 Flase가 되고, 홀수이면 True가 된다.
- filter() 함수의 결과는 filter 객체이므로, list() 함수를 사용하여 odd_numbers에 저장한다. 이로써 홀수 숫자만을 포함하는 리스트가 생성된다.
- odd_numbers 리스트를 출력하면, 필터링된 홀수 숫자만이 포함된 리스트가 출력된다.
정렬 기준 지정
students = [('Alice', 20), ('Bob', 25), ('Charlie', 18)]
students.sort(key=lambda x : x[1])
# 결과: [('Charlie', 18), ('Alice', 20), ('Bob', 25)]
위의 예제는 students라는 튜플의 리스트를 나이(x[1])를 기준으로 정렬하는 예제이다. 각 코드에 대한 해석은 다음과 같다.
- students 리스트는 튜플의 리스트로서, 각 튜플은 학생의 이름과 나이를 포함하고 있다.
- sort() 메서드를 사용하여 students 리스트를 정렬한다. key 매개변수를 이용하여 정렬 기준을 설정한다. 이 매개변수는 함수를 받으며, 각 항목을 어떻게 비교할지를 지정한다.
- lambda x : x [1] 람다 함수는 각 학생 튜플에서 두 번째 요소인 나이(x[1])를 반환한다. 이것은 정렬 기준으로 사용된다.
- 정렬 기준으로 학생들이 나이에 따라 오름차순으로 정렬된다.
- 정렬된 결과가 원래의 students 리스트에 저장되어, students 리스트는 나이에 따라 정렬된 순서를 가지게 된다.
- 정렬된 결과를 출력하면, 나이에 따라 오름차순으로 정렬된 학생 리스트가 출력된다.
def 람다함수(x):
return x[1]
a = [1,2]
print(람다함수(a)) # 출력 : 2
b = lambda x : x[1]
print(b(a)) # 출력 : 2
예제 코드에서 lamda x : x[1]은 위의 코드와 동일한 동작을 한다. 위의 코드를 보면 lamda x : x[1]의 의미를 이해하기 더 수월할 것이다.
이벤트 처리
def event_handler(callback):
# 어떤 이벤트가 발생했을 때
data = "이벤트 데이터"
callback(data)
event_handler(lambda data : print(f"이벤트 처리: {data}"))
이벤트 처리: 이벤트 데이터
위의 예제는 event_handler라는 함수를 정의하고, 이 함수를 호출할 때 콜백 함수(callback)를 전달하는 예제이다. 콜백 함수는 이벤트가 발생했을 때 실행되며, 이벤트 데이터를 처리하는 역할을 한다.
- event_handler 함수는 callback이라는 매개변수를 받는다. 이 callback은 함수 객체를 나타내며, 이벤트가 발생했을 때 실행할 함수를 전달할 수 있다.
- data 변수는 "이벤트 데이터"라는 문자열을 담고 있다.
- callback(data) 코드는 callback 함수를 호출한다. 여기서 data가 콜백 함수로 전달되며, 콜백 함수가 실행될 때 이 데이터를 처리할 수 있다.
- event_handler 함수가 호출될 때, 콜백 함수로 람다 함수가 전달된다. 람다 함수는 받은 데이터를 출력하는 역할을 한다.
- 람다 함수에서는 받은 데이터를 출력하는 print 문을 실행한다.
콜백 함수
def process_data(data, callback):
# 데이터 처리 로직
result = data + 10
callback(result)
process_data(5, lambda x : print(f"결과: {x}"))
결과: 15
위의 예제는 process_data라는 함수를 정의하고, 이 함수를 호출할 때 데이터(data)를 전달하며, 데이터를 처리한 결과를 출력하는 콜백 함수(callback)를 전달하는 예제이다.
- process_data 함수는 data는 callback 두 개의 매개변수를 받는다. data는 처리할 데이터를 나타내며, callback은 데이터 처리 결과를 처리하기 위한 콜백 함수이다.
- 데이터 처리 로직은 result 변수에 data + 10 연산을 수행하며 처리된다.
- callback(result) 코드는 callback 함수를 호출한다. 여기서 result가 콜백 함수로 전달되며, 콜백 함수는 이 결과를 처리할 역할을 한다.
- process_data 함수가 호출될 때, data로 5와 함께 람다 함수가 전달된다. 람다 함수는 받은 결과를 출력하는 역할을 한다.
- 람다 함수에서는 받은 결과를 출력하는 print 문을 실행한다.