lambda - 파이썬 람다 함수

Yves (Taeyeon Kim)·2021년 11월 17일
0
post-thumbnail

람다는 일반적인 함수와 비교하여 인라인(in-line)으로 작성 가능하다.
또한, 람다 함수는 함수 객체를 반환한다는 장점이 있다.
즉, 함수 객체를 인수로 필요로하는 map 혹은 filter 등의 함수와 함께 사용하여 그 기능을 극대화한다.

1. lambda

예시1)

# 함수정의
mul = (lambda a, b :  a * b)

# 함수호출
result = mul(2, 5)

# 결과출력
print(result)

# 10

예시2)

# 함수정의
define_word = (lambda word1, define :  word1 * define)

# 함수호출
result = define_word('string_',5)

# 결과출력
print(result)

# string_string_string_string_string_

2. map + lambda

map(func, iterable data type) 형식으로 쓴다.

# 리스트 생성
spelling = ["test1", "test2", "test4 test5", "test3"]

# 람다함수적용
shout_spells = map(lambda item: item + ('!!!'), spelling) 
## ==> 괄호 없이 '!!!'만 써도 된다.
## ==> spelling 리스트 내 모든 원소에 '!!!' 문자열을 붙인다.

# 리스트형태로 변환
shout_spells_list = list(shout_spells)

# 결과출력
print(shout_spells_list)

# ['test1!!!', 'test2!!!', 'test4 test5!!!', 'test3!!!']

3. filter + lambda

filter(func, iterable data type) 형식으로 쓴다.

# 리스트 생성
fellowship = ['frodo', 'samwise', 'merry', 'pippin',
'aragorn', 'boromir', 'legolas', 'gimli', 'gandalf']

# 람다함수적용
result = filter(lambda member: len(member) > 6, fellowship)
## => fellowship 리스트에서 문자열 길이 7이상인 원소만 filtering.

# 리스트형태로 변환
result_list = list(result)

# 결과출력
print(result_list)

# ['samwise', 'aragorn', 'boromir', 'legolas', 'gandalf']

4. reduce + lambda

reduce(func, iterable data type, initializer=None) 형식으로 사용한다.
reduce함수는 시퀀스(문자열, 튜플, 리스트)의 각 원소들을 누적하여 함수에 적용시킨다.
예시를 보자.

예시1)

# functools 모듈 사용
from functools import reduce

# 리스트 생성
ohmygosh = ['o', 'h', 'm', 'y', 'g', 'o', 's', 'h']

# 람다함수적용
result = reduce(lambda item1, item2:  item1+item2, ohmygosh)
## ==> 이 예제는 ohmygosh 내 모든 원소들을 차례대로 누적시키면서 더한다.

# 결과출력
print(result)

# ohmygosh

예시2.1.)

# functools 모듈 사용
from functools import reduce

# 리스트 생성
one_to_ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 람다함수적용
result = reduce(lambda item1, item2:  item1+item2, one_to_ten)
## ==> one_to_ten 리스트 내의 모든 원소를 차례대로 누적하여 더한다.

# 결과출력
print(result)

# 55

예시2.2.)

"""initializer 적용"""
# functools 모듈 사용
from functools import reduce

# 리스트 생성
one_to_ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 람다함수적용
result = reduce(lambda item1, item2:  item1+item2, one_to_ten, initializer=100)
## ==> one_to_ten 리스트 내의 모든 원소를 차례대로 누적하여 더한다.

# 결과출력
print(result)

# 155

예시3)

# functools 모듈 사용
from functools import reduce

# 리스트 생성
one_to_ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 람다함수적용
result = reduce(lambda item1, item2:  item1*item2, one_to_ten)
## ==> one_to_ten 리스트 내의 모든 원소를 차례대로 누적하여 곱한다.

# 결과출력
print(result)

# 3628800

예시4)

# functools 모듈 사용
from functools import reduce

# 리스트 생성
one_to_ten = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 람다함수적용
result = reduce(lambda item1, item2:  item2-item1, one_to_ten)
## ==> item1과 item2의 순서를 바꾸면 연산에 적용되는 원소의 순서가 바뀌어 연산된다.
## ==> (10-(...4-(3-(2-1))))

# 결과출력
print(result)

# 5

5. lambda 응용 (feat. if문)

5.1. 제곱수 만들기

a = [1, 2, 3, 4, 5]

square_num_list = list(map(lambda num: num**2, a))

print(square_num_list)

# [1, 4, 9, 16, 25]

5.2. 홀수/짝수 구분하기

a = [1, 2, 3, 4, 5]

odd_num = list(map(lambda num: "짝수" if num % 2 == 0 else "홀수", a))

print(odd_num)

# ['홀수', '짝수', '홀수', '짝수', '홀수']




created 11-17-2021.

  • 글작성

last modified 11-18-2021.

  • reduce 함수 initializer 예시 추가 => 예시 2.2.)

last modified 11-19-2021.

  • map, filter 함수 형식 추가
    => 2. map + lambda
    => 3. filter + lambda

0개의 댓글