함수 간편하게 작성 가능 -> 타 함수 인수로 넣을 때 주로 사용
lambda 매개변수들: 식
>>> def plus_ten(x):
... return x + 10
...
>>> plus_ten(1)
11
>>> lambda x: x + 10
<function <lambda> at 0x02C27270>
아직 호출은 불가 -> 이름이 없는 함수 만들기 때문(익명함수 anonymous funtion)
>>> plus_ten = lambda x: x + 10
>>> plus_ten(1)
11
(lambda 매개변수들: 식)(인수들)
>>> (lambda x: x + 10)(1)
11
** 주의: 람다표현식 안에는 새 변수를 만들 수 없음
람다표현식 사용의 이유: 함수의 인수부분에서 간단하게 함수 만들기 위해. (대표 예: map)
>>> def plus_ten(x):
... return x + 10
...
>>> list(map(plus_ten, [1, 2, 3]))
[11, 12, 13]
** map 사용할 때 자료형 int, str 대신 함수 직접 만들어 넣기 가능
>>> list(map(lambda x: x + 10, [1, 2, 3]))
[11, 12, 13]
lambda 매개변수들: 식1 if 조건식 else 식2
lambda 매개변수들: 식1 if 조건식1 else 식2 if 조건식2 else 식3
!! if, else에 : 붙이지 않음
if 사용했으면 반드시 else 도 있어야해
elif 불가 - 식1 if 조건식1 else 식2 if 조건식2 else 식3 형식처럼 if를 연속으로 사용 -- 보기 안좋으니 그냥 def로 하길 권장
예시,,
>>> a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> list(map(lambda x: str(x) if x % 3 == 0 else x, a))
[1, 2, '3', 4, 5, '6', 7, 8, '9', 10]
>>> 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))
['1', 2.0, 13, 14, 15, 16, 17, 18, 19, 20]
=
>>> 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))
['1', 2.0, 13, 14, 15, 16, 17, 18, 19, 20]
>>> a = [1, 2, 3, 4, 5]
>>> b = [2, 4, 6, 8, 10]
>>> list(map(lambda x, y: x * y, a, b))
[2, 8, 18, 32, 50]
filter(함수, 반복가능한객체)
반복가능한 객체에서 filter 에 지정현 함수의 반환값이 true일때만 요소 가져오기
예
>>> def f(x):
... return x > 5 and x < 10
...
>>> a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
>>> list(filter(f, a))
[8, 7, 9]
람다
>>> a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
>>> list(filter(lambda x: x > 5 and x < 10, a))
[8, 7, 9]
반복가능한 객체의 요소를 지정함수로 처리하고 이전 결과와 누적해서 반환 (모듈에서 함수가져와야함)
from functools import reduce
reduce(함수, 반복가능한객체)
예시
>>> def f(x, y):
... return x + y
...
>>> a = [1, 2, 3, 4, 5]
>>> from functools import reduce
>>> reduce(f, a)
15
람다
>>> a = [1, 2, 3, 4, 5]
>>> from functools import reduce
>>> reduce(lambda x, y: x + y, a)
15
람다보다 리스트표현식 사용 권유
reduce 대신 for, while반복문 권유
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]
[8, 7, 9]
>>> a = [1, 2, 3, 4, 5]
>>> x = a[0]
>>> for i in range(len(a) - 1):
... x = x + a[i + 1]
...
>>> x
15
표준 입력으로 숫자.확장자 형식으로 된 파일 이름 여러 개가 입력됩니다. 다음 소스 코드를 완성하여 파일 이름이 숫자 3개이면서 앞에 0이 들어가는 형식으로 출력되게 만드세요. 예를 들어 1.png는 001.png, 99.docx는 099.docx, 100.xlsx는 100.xlsx처럼 출력되어야 합니다. 그리고 람다 표현식을 사용해야 하며 출력 결과는 리스트 형태라야 합니다. 람다 표현식에서 파일명을 처리할 때는 문자열 포매팅과 문자열 메서드를 활용하세요.
list(map(lambda x:'{0:03d}.{1}'.format(int(x.split('.')[0]), x.split('.')[1]), files))
2-1. 파일이름 부분 구분하기
x.split('.')[0]
x로 받은 거를 .를 기준으로 구분하고 인덱스 0에 오는 값
2-2. 확장자 부분도 똑같이
x.split('.')[1]
4.람다식으로 표현해주기