[python3] 람다 함수, 람다 표현식(lambda)

민갱·2023년 7월 6일
0

Python

목록 보기
6/11

파이썬에서 def로 함수를 정의해서 사용했다. 더 나아가 람다 표현식으로 익명 함수를 만들어 사용 할 수 있다. sort, reduce, 등 여기저기에서 사용되기 때문에 공부하면 ㅎ한발짝 성장하는 것을 느낄 수 있을것이다.(약간 쓰면 멋져보이기도 함🫡)

람다 함수의 기초 설명이기 때문에 그냥 쭈욱 읽어 내려가면 이해가 될것이라 생각한다.


  • 람다 표현식은 식 형태로 되어 있다고 해서 람다 표현식(lambda expression)이라고 부른다.
    특히 람다 표현식은 함수를 간편하게 작성할 수 있어서, 다른 함수의 인수로 넣을 때 주로 사용 된다.

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

  • 람다 표현식을 사용하기 전에 먼저 숫자를 받은 뒤 10을 더해서 반환하는 함수 plus_ten을 만들어보자.
>>> def plus_ten(x):
		return x + 10
>>> plus_ten(1)
11

return x+10 으로 매개변수 x에 10을 더한 값을 반환하는 간단한 함수다.
그럼 이 plus_ten 함수를 람다 표현식으로 작성해 보자.

  • 람다 표현식은 다음과 같이 lambda에 매개변수를 지정하고 :(콜론) 뒤에 반환값으로 사용할 식을 지정한다.

lambda 매개변수들 : 식

>>> 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로 정의한 함수를 비교한 그림을 보자!

2. 람다 표현식 자체를 호출하기

람다 표현식은 변수에 할당하지 않고 람다 표현식 자체를 바로 호출할 수 있다. 다음과 같이 람다 표현식을 ()(괄호)로 묶은 뒤에 다시 ()를 붙이고 인수를 넣어서 호출하면 된다.

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

3. 람다 표현식 안에서는 변수를 만들 수 없다

람다 표현식에서 주의할 점은 람다 표현식 안에서는 새 변수를 만들 수 없다는 점이다.
따라서 반환값 부분은 변수 없이 식 한 줄로 표현할 수 있어야 한다. 변수가 필요한 코드일 경우에는 def로 함수를 작성해야한다.

>>> (lambda x: y = 10; x + y)(1)
SyntaxError: invalid syntax
  • 변수 y를 새로 만들었기 때문에 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
profile
가보자고

0개의 댓글