처음에 람다(lambda) 함수를 들었을 때, 이름부터 생소해서 굳이 사용하지 않고 있었는데
이번 강의 중에 람다(lambda) 함수를 배우면서
이렇게...간단하게 함수를 작성할 수 있구나를 알게 되면서
적극 익히려고 하고 있음
그래서
람다(lambda) 함수란?
(*파이썬 공식 문서: Python Lambdas)
lambda_expr ::= "lambda" [parameter_list] ":" expression
람다(lambda) 표현식(람다 폼이라고도 함)은 익명 함수를 만드는 데 사용됩니다. 표현식은 함수 객체를 생성합니다. 명명되지 않은 객체는 다음으로 정의된 함수 객체처럼 동작합니다.def <lambda>(parameters):
return expression
매개변수 목록의 구문은 함수 정의 섹션을 참조하세요 . 람다(lambda) 표현식으로 생성된 함수는 문장이나 주석을 포함할 수 없습니다.
이렇다고 한다.
ChatGPT에 물어보니 이런 장점을 알려줌
- 익명성: 람다(lambda) 함수는 이름이 없고, 한 줄로 간단하게 정의됩니다.
- 간결성: 일반적으로 짧은 함수를 간단하게 표현할 때 유용합니다.
- 함수 객체: 람다(lambda) 함수는 함수 객체로 취급되어 변수에 할당하거나 다른 함수의 인자로 전달할 수 있습니다.
- 단일 표현식: 람다(lambda) 함수는 보통 단일 표현식(expression)으로 구성되며, 그 결과가 자동으로 반환됩니다.
그러면서 마지막엔 '보통 간단한 연산이나 짧은 함수를 정의할 때 유용하지만, 복잡한 로직이 필요한 경우에는 일반적인 함수 정의가 더 나을 수 있습니다.' 라고 한다.
람다(lambda) 함수 사용에 대해 예를 들어 보자면,
예1) 간단한 덧셈 수행하는 경우:
add = lambda x, y: x + y
print(add(3, 5)) # 출력: 8
예2) 리스트의 각 요소에 제곱 계산하는 경우:
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # 출력: [1, 4, 9, 16, 25]
예시를 보니 조금 더 사용법에 대해 이해가 쉬웠다.
아래는 동일한 내용에 대해 def() 함수와 labmda() 함수가 각각 다르게 적어지는 걸 볼 수 있는데,
get_page_cnt2 함수는 row라는 매개변수를 받는다. 이 row는 함수가 호출될 때 전달되는 실제 인자(argument)를 의미합니다. 함수 내에서 isbn이라는 변수는 row에서 'isbn13'이라는 키에 해당하는 값으로 초기화됩니다. 그리고 get_page_cnt 함수에 isbn을 인자로 전달하여 그 결과를 반환합니다. (*isbn은 함수 get_page_cnt2 내에서 매개변수로 사용되는 변수)
def get_page_cnt2(row):
isbn = row['isbn13']
return get_page_cnt(isbn)
위와 같은 함수를 아래와 같은 람다(lambda) 함수로 변경하면 다음과 같다.
아래 코드는 top10_book 데이터프레임의 각 행에서 'isbn13' 값을 추출하고, 이 값을 get_page_cnt 함수의 인자로 전달하여 책의 페이지 수를 구하는 작업을 수행하는데, 이 과정에서 람다(lambda) 함수가 각 행에 대해 인라인으로 정의되어 사용되었다. 여기서 axis=1은 각 행(row)에 함수를 적용한다는 것을 의미한다. 즉, 각 행을 순회하면서 함수를 적용하게 된다.
page_count = top10_book.apply(lambda row: get_page_cnt(row['isbn13']), axis=1)
간단한 연산은 이제 람다(lambda) 함수로 적어보는 연습을 해보자.