Categories
코딩

파이썬 def와 lambda 문법 및 차이점 비교

비슷한 기능을 하는 두가지 키워드에 대해 살펴보도록 하겠습니다. 쓸데없이 2개를 만들어 놓지는 않았겠죠?

def 설명

일단 예를 하나 들어 볼게요.

def add(x, y):
    return x + y
print(add(3,5))

결과는 다음과 같습니다.

8

함수는 def 키워드로 작성을 합니다.

add는 함수의 이름이고, 전달 받을 인자를 x, y로 정의하였습니다.

두 값을 더한 결과를 return해 주는 기능을 하고 있습니다.

이렇게 만든 add 함수에 3과 5를 인자로 전달하였더니 8이라는 결과가 나오는 것을 볼 수 있습니다.

lambda 설명

위의 함수와 같은 기능을 만들어 보겠습니다.

add = lambda x,y: x+y
print(add(2,3))

결과는 다음과 같습니다.

5

lambda라는 키워드를 이용하여 x, y를 인자로 받고 두 값을 더한 결과를 return하는 기능을 합니다.

람다는 기본적으로 이름이 없는 함수를 만듭니다.

그리고 한 줄로 좀 더 간결하게 쓸 수 있습니다.

또한 return 키워드를 사용하지 않습니다.

변수에 대입하여 함수와 동일하게 사용할 수도 있습니다.

활용 방법 비교

이해를 돕기 위해 다른 사용 예를 한 번 보겠습니다.

temp = [1,2,3,4,5]
result = list(filter(lambda x:x>2, temp))
print(result)

결과는 다음과 같습니다.

[3,4,5]

filter 메서드를 이용하여 원소를 1~5까지 갖는 배열에서 2보다 큰 값만 골라내는 예제입니다.

lambda는 값을 전달 받아 2보다 큰 지 판단하여 참(True), 거짓(False) Boolean 값을 return하는 기능을 합니다.

filter 메서드 첫번째 인자에 람다, 두번째 인자에 배열을 대입 합니다.

배열을 순회하며 2보다 크면 값을 유지하고 그렇지 않으면 제외하여 결과를 만듭니다.

filter로 얻은 결과를 list 메서드로 배열 형태를 만들어 result 변수에 저장하였습니다.

함수로 완전히 동일한 기능을 만들어 보겠습니다.

temp = [1,2,3,4,5]
def comp(x):
    return x > 2
result = list(filter(comp, temp))
print(result)

결과는 다음과 같습니다.

[3,4,5]

어떤 방식으로 구현하든 상관은 없지만 이 예제 같은 경우에는 람다가 조금 더 간결하죠?

실제로 type을 찍어 보면 def, lambda로 구현한 것 모두 function으로 같게 나옵니다.

따라서 람다가 함수 안에 포함된다는 개념으로 생각해도 될 것 같습니다.

결론은 def 키워드는 재사용이 필요한 함수를 만들 때 사용하고 간단한 일회성 함수를 만들고 싶을 때는 lambda를 사용하는 편이 좋을 것 같습니다.

이 게시물에 2개의 답글이 있습니다.

답글 남기기

이메일 주소는 공개되지 않습니다.

ko_KR한국어