파이썬에서 def로 함수를 정의해서 사용했다. 더 나아가 람다 표현식으로 익명 함수를 만들어 사용 할 수 있다. sort, reduce, 등 여기저기에서 사용되기 때문에 공부하면 ㅎ한발짝 성장하는 것을 느낄 수 있을것이다.(약간 쓰면 멋져보이기도 함🫡)
람다 함수의 기초 설명이기 때문에 그냥 쭈욱 읽어 내려가면 이해가 될것이라 생각한다.
>>> def plus_ten(x):
return x + 10
>>> plus_ten(1)
11
return x+10 으로 매개변수 x에 10을 더한 값을 반환하는 간단한 함수다.
그럼 이 plus_ten 함수를 람다 표현식으로 작성해 보자.
>>> lambda x : x+10
<function <lambda> at 0x02C27270>
실행해 보면 함수 객체가 나오는데, 이 상태로는 함수를 호출할 수 없다. 왜냐하면 람다 표현식은 이름이 없는 함수(익명 함수)이기 때문이다.
그래서 람다 표현식을 익명 함수(anonymous function)로 부르기도 한다.
lambda로 만든 익명 함수를 호출하려면 다음과 같이 람다 표현식을 변수에 할당해주면 된다.
>>> plus_ten = lambda x : x + 10
>>> plus_ten(1)
11
이제 람다 표현식을 살펴보면 lambda x: x+10은 매개변수 x를 하나 받고, x에 10을 더해서 반환한다는 뜻이다.
즉 매개변수, 연산자, 값 등을 조합한 식으로 반환값을 만드는 방식이다. 람다함수와 def로 정의한 함수를 비교한 그림을 보자!
람다 표현식은 변수에 할당하지 않고 람다 표현식 자체를 바로 호출할 수 있다. 다음과 같이 람다 표현식을 ()(괄호)로 묶은 뒤에 다시 ()를 붙이고 인수를 넣어서 호출하면 된다.
>>> (lambda x : x+10)(1)
11
람다 표현식에서 주의할 점은 람다 표현식 안에서는 새 변수를 만들 수 없다는 점이다.
따라서 반환값 부분은 변수 없이 식 한 줄로 표현할 수 있어야 한다. 변수가 필요한 코드일 경우에는 def로 함수를 작성해야한다.
>>> (lambda x: y = 10; x + y)(1)
SyntaxError: invalid syntax
단! 람다 표현식 바깥에 있는 변수는 사용할 수 있다.
다음은 매개변수 x와 람다 표현식 바깥에 있는 변수 y를 더해서 반환하다.
>>> y = 10
>>> (lambda x: x+y)(1)
11
람다 표현식을 사용하는 이유는 함수의 인수 부분에서 간단하게 함수를 만들기 위해서이다.
람다 표현식을 사용하기 전에 먼저 def로 함수를 만들어서 map을 사용해보자, 그 다음과 같이 숫자를 받은 뒤 10을 더해서 반환하는 함수 plus_ten을 작성해보자. 그리고 map에 plus_ten함수와 리스트[1,2,3]을 넣는다. 물론 map의 결과는 map 객체이므로 눈으로 확인 할 수 있도록 list를 사용해서 리스트로 반환해준다.
>>> def plus_ten(x):
return x + 10
>>> list(map(plus_ten, [1,2,3]))
[11,12,13]
plus_ten 함수 대신 람다 표현식 lambda x: x+ 10을 넣는다. 전체 적으로 보면 코드가 세줄에서 한줄로 줄었다. 이처럼 람다 표현식은 함수를 다른 함수의 인수로 넣을 때 매우 편리하다!!
>>> list(mal(lambda x : x + 10,[1,2,3])
[11,12,13]
람다 표현식으로 매개변수가 없는 함수를 만들 때는 lambda 뒤에 아무것도 지정하지 않고 :(콜론)을 붙인다.단, 콜론 뒤에 반드시 반환할 값이 있어야한다.
왜냐하면 표현식(expression)은 반드시 값으로 평가되어야 하기 때문이다.
>>> lambda(:1)()
1
>>> x= 10
>>> lambda(:x)()
10