티스토리 뷰

이전에 정렬을 하면서 잠깐 짚고 넘어갔던 람다 함수에 대해서 심도있게 알아보겠다.


파이썬에서는 이름이 없고 함수 객체만 존재하는 익명함수를 만들 수 있다. 일반함수와 마찬가지로 필요한곳 어디에서나 쓰일 수 있는 함수이고, 여러개의 전달받을수 있으며 리턴 구문을 적지 않아도 하나의 반환괎을 돌려 줄 수 있다. 바로 람다(lambda) 함수에 대한 설명인데, 람다함수는 한줄을 실행한 결과 값이 바로 반환값이 된다.

람다 함수는 한줄의 간단한 함수가 필요한 경우나 프로그램의 가독성을 위해 함수를 인자로 넘겨줄때 쓸 수 있다.

예제를 통하여 한번 살펴보겠다.

문제. 입력받은 값의 두배를 출력하는 함수를 만들어서 리스트의 값을 모두 출력해 보시오.

1
2
3
4
5
6
7
def makeDouble(n):
    return n*2
 
= [135]
 
for i in a:
    print(makeDouble(i), end=' ')
cs

간단하게 이와 같은 형식으로 함수를 만들 수 있지 않을까? 그런데 함수의 길이가 굉장히 짧은데 이를 더 편하게 사용할 수 있는 방법이 없을까?

1
2
3
4
t1 = makeDouble
 
for i in a:
    print(t1(i), end=' ')
cs

이와 같이 t1에 함수자체를 저장하는 방법이 있다. t1을 사용하면 makeDouble함수를 사용하는것과 똑같이 사용할 수 있다. 마치 C언어에서 함수 포인터를 사용하는것과 같지만 실제로는 매크로를 사용하는것과 더 유사하다.

1
    print((lambda n: n*2)(i), end=' ')
cs

다음으로 알아볼 형식이 앞서 설명한 람다 함수인데, 이와 같이 한줄로 매개변수를 입력받고 반환값을 전달할 수 있다.

위 코드를 통해서 이야기 하자면 n을 전달인자로 받아서 n*2를 반환한다는 뜻이고 i값을 n으로 보낸다는 뜻이다. 위 코드도 이전에 사용했던 방식과 같이 함수 이름을 저장해서 사용할 수 있다. 사실 이전에 보여준 t1 = makeDouble 과 같은 형식은 잘 사용하지 않는다 왜냐하면 정의된 함수 이름을 불러서 호출할 수 있기 때문에 굳이 별명을 붙여줄 필요가 없기 때문이다. 하지만 람다함수는 코드의 가독성을 위해서 종종왕왕 사용하기도 한다.

1
t2 = lambda n: n*2
cs

다음과 같이 선언하여 

1
    print(t2(i), end=' ')
cs

일반 함수를 사용하듯이 사용한다.

람다함수는 파이썬 뿐만이 아니라 다른 언어에서도 통용되는 문법이기 때문에 잘 숙지해놓는것이 좋겠다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함