새소식

반응형
Programming Language/Python

[Python] 파이썬 lambda 함수

  • -
반응형

파이썬 로고 이미지입니다.
Python

파이썬 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 리스트의 각 요소를 필터링하고, 조건을 만족하는 숫자만 남기는 람다 함수를 적용한다.

 

람다 함수의 과정은 다음과 같다.

  1. 람다 함수 lambda x : x % 2!= 0은 주어진 숫자 x가 홀수인지를 확인하는 조건을 나타낸다. 숫자가 짝수이면 x % 2!= 0은 Flase가 되고, 홀수이면 True가 된다.
  2. filter() 함수의 결과는 filter 객체이므로, list() 함수를 사용하여 odd_numbers에 저장한다. 이로써 홀수 숫자만을 포함하는 리스트가 생성된다.
  3. 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])를 기준으로 정렬하는 예제이다. 각 코드에 대한 해석은 다음과 같다.

 

  1. students 리스트는 튜플의 리스트로서, 각 튜플은 학생의 이름과 나이를 포함하고 있다.
  2. sort() 메서드를 사용하여 students 리스트를 정렬한다. key 매개변수를 이용하여 정렬 기준을 설정한다. 이 매개변수는 함수를 받으며, 각 항목을 어떻게 비교할지를 지정한다.
  3. lambda x : x [1] 람다 함수는 각 학생 튜플에서 두 번째 요소인 나이(x[1])를 반환한다. 이것은 정렬 기준으로 사용된다.
  4. 정렬 기준으로 학생들이 나이에 따라 오름차순으로 정렬된다.
  5. 정렬된 결과가 원래의 students 리스트에 저장되어, students 리스트는 나이에 따라 정렬된 순서를 가지게 된다.
  6. 정렬된 결과를 출력하면, 나이에 따라 오름차순으로 정렬된 학생 리스트가 출력된다.
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)를 전달하는 예제이다. 콜백 함수는 이벤트가 발생했을 때 실행되며, 이벤트 데이터를 처리하는 역할을 한다.

  1. event_handler 함수는 callback이라는 매개변수를 받는다. 이 callback은 함수 객체를 나타내며, 이벤트가 발생했을 때 실행할 함수를 전달할 수 있다.
  2. data 변수는 "이벤트 데이터"라는 문자열을 담고 있다.
  3. callback(data) 코드는 callback 함수를 호출한다. 여기서 data가 콜백 함수로 전달되며, 콜백 함수가 실행될 때 이 데이터를 처리할 수 있다.
  4.  event_handler 함수가 호출될 때, 콜백 함수로 람다 함수가 전달된다. 람다 함수는 받은 데이터를 출력하는 역할을 한다.
  5. 람다 함수에서는 받은 데이터를 출력하는 print 문을 실행한다.

 

콜백 함수

def process_data(data, callback):
    # 데이터 처리 로직
    result = data + 10
    callback(result)

process_data(5, lambda x : print(f"결과: {x}"))
결과: 15

위의 예제는 process_data라는 함수를 정의하고, 이 함수를 호출할 때 데이터(data)를 전달하며, 데이터를 처리한 결과를 출력하는 콜백 함수(callback)를 전달하는 예제이다.

  1. process_data 함수는 data는 callback 두 개의 매개변수를 받는다. data는 처리할 데이터를 나타내며, callback은 데이터 처리 결과를 처리하기 위한 콜백 함수이다.
  2. 데이터 처리 로직은 result 변수에 data + 10 연산을 수행하며 처리된다.
  3. callback(result) 코드는 callback 함수를 호출한다. 여기서 result가 콜백 함수로 전달되며, 콜백 함수는 이 결과를 처리할 역할을 한다.
  4. process_data 함수가 호출될 때, data로 5와 함께 람다 함수가 전달된다. 람다 함수는 받은 결과를 출력하는 역할을 한다.
  5. 람다 함수에서는 받은 결과를 출력하는 print 문을 실행한다.

 

 

728x90
반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.