"정보처리기사를 공부 중인데 중간에 이상한 단어가 섞여 있다.
알고보니 lamda 표현식이다. 그래서 이번에 공부하면서 정리하려고 한다."-tthonam(작성자)-
⚙️ 람다(lambda) 표현식 설명
⚒️ 1. 람다(lambda) 표현식이란?
⚒️ 2. 람다 표현식 특징
⚒️ 3. 람다 표현식과 map, filter, reduce 함수 활용하기
⚒️ 4. 람다 표현식 실제 사용
⚒️ 5. 람다 표현식에 조건부 표현식 사용하기
🗝️ 참고 링크(Reference)
람다 표현식 : "식 형태"로 되어 있다고 해서 "람다 표현식(lambda expression)"이라고 부름
lambda x: x + 10
<function <lambda> at 0x02C27270>
▶️ 위 함수는 람다식을 사용하고 0x02C27270라는 메모리 주소를 사용하고 있음.
함수를 간편하게 작성 가능 ▶️ 다른 함수의 인수로 넣을 때 주로 사용.
실행 시 함수 객체가 나옴 ▶️ 이 상태로는 함수를 호출 X.
람다 표현식은 이름이 없는 함수를 만들기 때문 ▶️ 람다 표현식을 익명 함수(anonymous function) 로 부르기도 함.
lambda 에 매개변수를 지정하고 :(콜론) 뒤에 반환 값으로 사용할 식을 지정.
lambda 로 만든 익명 함수를 호출하기 위해 람다 표현식을 변수에 할당해주면 된다.plus_ten = lambda x: x + 10
plus_ten(1)
result = 11

() 로 묶은 뒤에 다시 () 를 붙이고 인수를 넣어서 호출.▶️ 식 : (lambda 매개변수들: 식)(인수)
(lambda x: x + 10)(1)
result = 11
(lambda x: y = 10; x + y)(1)
SyntaxError: invalid syntax
▶️ 표현식 바깥에 있는 변수는 사용 가능.
다음은 매개변수 x와 람다 표현식 바깥에 있는 변수 y를 더해서 반환하는 식이다.
y = 10
(lambda x: x + y)(1)
result = 11
lambda 뒤에 아무것도 지정하지 않고 :(콜론) 을 붙입니다. 반환할 값 이 있어야 함. ▶️ 표현식(expression) 은 반드시 나와야 함.(lambda : 1)()
result = 1
x = 10
(lambda : x)()
result = 10
🔑 람다 표현식을 인수로 사용
- 람다 표현식은 함수를 다른 함수의 인수로 넣을 때 매우 편리
- 사용하는 이유 : 함수의 인수 부분에서 간단하게 함수를 만들기 위해
사용하는 대표적인 예 :map
(map함수의 예시는 바로 밑에서 다루겠다)
map(함수, 리스트) : 함수 와 리스트 를 인자로 받음
리스트로부터 원소를 하나씩 꺼내서 함수에 적용 ➡️ 결과를 새로운 리스트에 넣음
map 함수가 매개변수로 받은 함수 : lambda x: x ** 2
리스트 : range(5) 를 받음 (range(5) = [0, 1, 2, 3, 4] )
/** 파이썬 2 및 파이썬 3 **/
list(map(lambda x: x ** 2, range(5)))
result = [0, 1, 4, 9, 16]
a = [1, 2, 3, 4, 5]
b = [2, 4, 6, 8, 10]
list(map(lambda x, y: x * y, a, b))
result = [2, 8, 18, 32, 50]
lambda x, y: x * y 처럼 매개변수두 개를 지정.map 에 람다 표현식을 넣고 리스트 두 개를 콤마로 구분해서 넣어줌.reduce : 반복 가능한 객체의 각 요소를 지정된 함수로 처리시퀀스)의 원소들을 누적시켜 반환.🔑
reduce는 파이썬 3부터 내장 함수가 아님
- functools 모듈에서 reduce 함수를 가져와야함
from functools import reduce입력
/** 파이썬 3에서는 써야함 **/
from functools import reduce
reduce(함수, 시퀀스(: 문자열, 리스트, 튜플, 반복가능한객체))reduce(lambda x, y: x + y, [0, 1, 2, 3, 4])
result = 10
/** 영역 나누기 **/
reduce(lambda x, y: y + x, 'abcde')
result = 'edcba'
def f(x, y):
return x + y
a = [1, 2, 3, 4, 5]
from functools import reduce
reduce(f, a)
result = 15
reducea = [1, 2, 3, 4, 5]
from functools import reduce
reduce(lambda x, y: x + y, a)
result = 15

filter는 반복 가능한 객체 ▶️ 특정 조건에 맞는 요소 가져옴.
filter에 지정한 함수의 반환 값 이 True 면 해당 값을 가져옴.
filter(함수, 리스트(반복가능한객체)) : 리스트에 들어있는 원소를 함수에 적용
▶️ 결과가 참인 값들 로 새로운 리스트를 만들어 줌
/** 파이썬 2 및 파이썬 3 **/
list(filter(lambda x: x < 5, range(10)))
result = [0, 1, 2, 3, 4]
/** 파이썬 2 및 파이썬 3 **/
list(filter(lambda x: x % 2, range(10)))
result = [1, 3, 5, 7, 9]
▶️ 2로 나누었을 때 1이 나와야
참이니 홀수만 뽑는 함수이다
def 함수를 만들어 filter 를 사용def f(x):
return x > 5 and x < 10
a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
list(filter(f, a))
result = [8, 7, 9]
▶️ filter 는 x > 5 and x < 10 의 결과가 참 인 요소만 가져오고 거짓 인 요소는 버림.

a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
list(filter(lambda x: x > 5 and x < 10, a))
result = [8, 7, 9]
람다 표현식 으로 익명 함수 를 만들고 ▶️ map , filter , reduce사용.
람다 표현식은 간단한 함수를 만들 때 자주 사용.
리스트(딕셔너리, 세트) 표현식 으로 처리할 수 있는 경우에는 map , filter , 람다 표현식 보다는 ▶️ 리스트 표현식 이 좀 더 알아보기 쉽고 속도도 더 빠름.
list(filter(lambda x: x > 5 and x < 10, a))
a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
[i for i in a if i > 5 and i < 10]
result = [8, 7, 9]
for , while 반복문 으로 처리할 수 있는 경우 : reduce 보다 ▶️ for , while 사용.reduce는 코드가 조금만 복잡해져도 의미하는 바를 한 눈에 알아보기가 힘듬(.파이썬 3 부터는 reduce 가 내장 함수에서 제외됨)
▼ reduce(lambda x, y: x + y, a) 는 아래와 같이 for 반복문 으로 표현
a = [1, 2, 3, 4, 5]
x = a[0]
for i in range(len(a) - 1):
x += a[i + 1]
x
result = 15
lambda 매개변수들 :식1 if 조건식 else 식2 형식
▶️ 참: 식1 , 거짓 : 식2
람다 표현식에서 if 사용시 ▶️ 반드시 else 사용.
조건부 표현식 if, else 를 사용할 때 : :(콜론) 을 붙이지 X.
일반적인 if, else 와 문법이 다르므로 주의.
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(map(lambda x: str(x) if x % 3 == 0 else x, a))
result = [1, 2, '3', 4, 5, '6', 7, 8, '9', 10]
▼ 위의 식을 그림으로 정리하면 아래와 같다.

list(map(lambda x: str(x) if x % 3 == 0, a))
SyntaxError: invalid syntax
elif 사용 X.식1 if 조건식1 else 식2 if 조건식2 else 식3if 를 연속 사용.a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(map(lambda x: str(x) if x == 1 else float(x) if x == 2 else x + 10, a))
result = ['1', 2.0, 13, 14, 15, 16, 17, 18, 19, 20]
🔑 람다 표현식에서 조건부 표현식을 사용할 때 복잡하지 않은 조건을 사용
▶️ 이유: 알아보기가 힘듬
def 함수 만들고if , elif , else 사용 권장.def f(x):
if x == 1:
return str(x)
elif x == 2:
return float(x)
else:
return x + 10
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(map(f, a))
result = ['1', 2.0, 13, 14, 15, 16, 17, 18, 19, 20]
🔑 복잡하고 어렵게 코드를 작성
▶️ 나중에 시간이 지나서 자기가 만든 코드인데도 못 알아보는 경우가 생김.
▶️ 코드는 길이가 조금 길어지더라도 알아보기 쉽게 작성하는 것이 좋음.
람다 표현식이라는 듣도 보도 못한 용어를 이번에 정리했는데 정보처리기사를 공부하면서 글을 정리하니 정리할 주제들이 점점 많아지는 것 같다.
매일 부지런히 글을 올려야겠다.(그래도 글 올릴 주제들이 넘처나니 그거 하나는 좋다...)