lambda
) 함수는 적절한 곳에 잘 쓰인다면 코드가 간결해 보이지만, 그렇지 않고 남용하게 된다면 코드가 매우 지저분해 보이는 효과 있음def
를 이용해서 다른 곳에 함수를 만들고 그걸 또 호출해서 부르기까지의 수고가 필요하지 않은 그런 가벼운 함수들을 위해서 만들어진게 람다 함수lambda 인자:표현식
lambda
라는 키워드를 입력하고 뒤에는 매개변수(인자)를 입력하고 콜론(:
)을 넣은 다음에 그 매개변수(인자)를 이용한 동작들을 적으면 됨lambda x : x * 2
Tip! 람다 함수와 일반 함수의 비교
# 짝수를 판별하는 함수를 만드려고 할 때 # 일반 함수 def is_even(x): return x % 2 == 0 # 람다 함수 is_even = lambda x : x % 2 == 0 # 호출 방법은 동일 is_even(1) # False is_even(2) # True
map(함수, 리스트나 튜플)
map
함수는 리스트나 튜플에 어떤 특별한 처리를 할때 사용하는 함수# 리스트의 모든값에 2씩 더해서 새로운 리스트를 만드려고 할 때
# 일반 함수
def plus_two(x):
return x + 2
result1 = list(map(plus_two, [1, 2, 3, 4, 5]))
print(result1)
>>> [3, 4, 5, 6, 7]
# 람다 함수
result2 = list(map((lambda x: x + 2), [1, 2, 3, 4, 5]))
print(result2)
>>> [3, 4, 5, 6, 7]
# 람다 함수
result3 = list(map((lambda x : x + 2), range(1, 6)))
print(result3)
>>> [3, 4, 5, 6, 7]
filter(함수, 리스트나 튜플)
filter
함수는 map
함수와 비슷하게 첫번째 인자로 함수를 받고 리스트나 튜플을 두번째 인자로 받음# 짝수들만 걸러서 리스트를 다시 만드려고 할 때
# 일반 함수
def is_even(x):
return x % 2 == 0
result1 = list(filter(is_even, range(10)))
print(result1)
>>> [0, 2, 4, 6, 8]
# 람다 함수
result2 = list(filter((lambda x: x % 2 == 0), range(10)))
print(result2)
>>> [0, 2, 4, 6, 8]
Tip! 추가 내용
# 일반 함수
def func(a):
return a+1
# 람다 함수
func = lambda a: a+1
# 인자를 두개 받아 받은 인자값을 합해 반환하는 람다 함수
func = lambda a,b: a+b
r = list(map(lambda a,b: a+b, [1,2,3], [10,20,30]))
print(r)
>>> [11, 22, 33]
closure
)라고도 함# 람다 함수 사용 O
def makeFunc(n):
return lambda a : a % n == 1
isOdd = makeFunc(2)
print(isOdd(11))
>>> True
# 람다 함수 사용 X
def makeFunc(n):
def func(a):
return a % n == 1
return func
func
)을 불필요하게 부여해야 함# 들여쓰기
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
r = list(
map(
lambda x:
'BIG' if x > 5
else 'SMALL' if x < 5
else 'MIDDLE',
a
)
)
print(r)
>>> ['SMALL', 'SMALL', 'SMALL', 'SMALL', 'MIDDLE', 'BIG', 'BIG', 'BIG', 'BIG', 'BIG']
# 들여쓰기 제거
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
r = list(map(lambda x: 'BIG' if x > 5 else 'SMALL' if x < 5 else 'MIDDLE', a))
print(r)
>>> ['SMALL', 'SMALL', 'SMALL', 'SMALL', 'MIDDLE', 'BIG', 'BIG', 'BIG', 'BIG', 'BIG']