본문 바로가기

함수의 다른 형태 lambda

람다 함수는 'lambda 매개변수: 표현식' 형태의 익명 함수로, 'map', 'filter' 등과 함께 간결한 코드 작성에 활용됩니다. 복잡한 로직에는 일반 함수를 사용하세요.

1. lambda

lambda 함수는 Python의 강력한 도구 중 하나로, 간결한 함수를 빠르고 익명으로 생성할 수 있게 해줍니다. lambda 함수는 작은 규모의 함수를 정의할 때 사용되며, 코드를 더욱 깔끔하고 효율적으로 만들 수 있습니다.

1.1 Lambda 함수의 정의와 사용

Lambda 함수는 다음과 같은 형식으로 정의됩니다:

lambda parameters: expression

여기서 parameters는 함수에 전달되는 매개변수를 나타내며, expression은 이 매개변수를 사용하여 계산되는 표현식을 나타냅니다. 이 표현식의 결과값이 함수의 반환값이 됩니다. return을 적지 않는다는 점에 주의해주세요. 표현식의 결과가 곧 반환값입니다.

  • parameters: 람다 함수의 매개변수입니다. 여러 개의 매개변수를 쉼표(,)로 구분하여 지정할 수 있습니다.
  • expression: 람다 함수에서 실행할 표현식입니다. 이 표현식은 매개변수를 이용하여 값을 계산하고, 계산된 값을 반환합니다.

단일 매개변수를 받아 그 제곱을 반환하는 람다 함수의 예시입니다.

square = lambda x: x*x
print(square(5))  # 출력: 25

1.2 람다 함수의 특징

람다함수는 이름을 붙일 수도 있지만 대다수의 경우 아래처럼 다른 함수에 이름 없이 인자로 전달이 가능합니다.

list(map(lambda x: x**2, [1, 2, 3]))

이는 같은 기능을 하는 아래 코드보다 더욱 간결한 코드를 작성할 수 있게 해줍니다.

def square(x):
    return x**2

list(map(square, [1, 2, 3]))

다만 람다함수가 장점만 있는 것은 아닙니다. 람다 함수는 복잡한 로직을 구현하기에는 적절하지 않습니다. 만약 복잡한 로직을 구현해야 할 경우에는 함수로 구현하여 가독성을 높이세요.

람다를 변수에 담지는 마세요.

아래처럼 람다에 이름을 붙이는 것도 문법적으로는 가능합니다.

square = lambda x: x**2  # 권장하지 않습니다.

하지만 PEP 8은 이런 코드 대신 def를 쓰라고 권합니다. 이름을 붙일 거라면 익명 함수를 쓸 이유가 없고, 오히려 손해를 보기 때문입니다. def로 만든 함수는 자기 이름을 알고 있어 에러 메시지에 함수 이름이 찍히지만, 람다는 그렇지 않습니다.

square = lambda x: x**2
def cube(x):
    return x**3

print(square.__name__)  # <lambda>
print(cube.__name__)    # cube

에러가 났을 때 트레이스백에 <lambda>만 잔뜩 찍히면 어느 함수에서 문제가 생겼는지 알기 어렵습니다. 람다는 map, filter, sorted의 key처럼 그 자리에서 한 번 쓰고 버릴 때만 사용해주세요.

2. 나아가기

람다 함수는 고차 함수(higher-order function)와 함께 사용하여 코드의 유연성을 높일 수 있습니다. 예를 들어, map, filter와 같은 내장 함수들과 함께 람다 함수를 사용하면 다음과 같이 좀 더 편리하게 코드를 구현할 수 있습니다:

numbers = [1, 2, 3, 4, 5]
print(list(filter(lambda x: x > 3, numbers)))  # 출력: [4, 5]
함수의 다른 형태 lambda - 견고한 파이썬 | 위니버시티