python 람다 표현식

yo·2020년 5월 11일
0

람다 표현식으로 함수 만들기

-식 형태로 되어 있어서 람다 표현식(lambda expression)이라고 부름
-람다 표현식은 함수를 간편하게 작성할 수 있어서 다른 함수의 인수로 넣을 때 주로 사용
문법: lambda 매개변수들 : 식

def plus_ten(x):
	return x + 10

>>> lambda x : x + 10
<function <lambda> at 0x02EC7CD0>
>>> 

-위 상태로는 함수를 호출할 수 는 없다.
-람다 표현식은 이름 없는 함수, 익명함수(anonymous function)을 만들기 때문.
-lambda함수 호출하려면 다음과 같이 변수에 할당해라

plus_ten = lambda x : x + 10
>>> plus_ten(1)
11

-변수에 할당 하지 않고 람다 표현식 바로 호출하기
문법: (lambda 매개변수들: 식)(인수들)

(lambda x : x + 10)(1)
11


람다 표현식에 조건부 표현식 사용하기

문법: lambda 매개변수들: 식1 if 조건식 else 식2
-람다 표현식 안에서 조건부 표현식 if, else를 사용할 때는 콜론 사용x
-일반적 if, else문법과 다르다(조심!)
-식1은 조건식이 참일 때, 식2는 조건식이 거짓일 때 사용.
-if를 사용했다면 반드시 else 사용해야 함. otherwise 오류 발생
-elif 사용 불가, 위의 식을 반복해서 사용해야함.
-아래는 map으로 리스트 a에서 3의 배수 문자열로 반환

a = [1,2,3,4,5,6,7,8,9,10]
print(list(map(lambda x : str(x) if x % 3 == 0 else x, a)))

결과 [1, 2, '3', 4, 5, '6', 7, 8, '9', 10]

if식 여러개 사용

a = [1,2,3,4,5,6,7,8,9,10]
print(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]

map 에 객체 여러개 넣기

a = [1,2,3,4,5]
b = [2,4,6,8,10]
print(list(map(lambda x, y: x*y, a,b)))

[2, 8, 18, 32, 50]

fliter 사용

-filter는 반복 가능한 객체에서 특정 조건에 맞는 요소만 가져오는데, filter에 지정한 함수의 반환값이 True일때만 해당 요소를 가져온다.
문법: filter(함수, 반복가능한객체)
-x >5 and x < 10 의 결과가 참인 요소만 가져오는 예시

a = [5, 1, 9, 15, 2, 7, 3]
>>> list(filter(f, a))
[9, 7]

위 식을 람다표현식으로 바꿔보자

list(filter(lambda x: x>5 and x <10, a))
[9, 7]

reduce 사용

-reduce는 반복 가능한 객체의 각 요소를 지정된 함수로 처리한 뒤 이전 결과와 누적해서 반환하는 함수다.(reduce는 python3부터 내장함수가 아니다. so, functools 모듈에서 reduce 함수를 가져와야 한다.)
문법:
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
profile
Never stop asking why

0개의 댓글