[파이썬] 클로저와 무명 함수 (lambda)

클로저와 무명 함수 (lambda)는 Python에서 매우 유용한 개념입니다. 이 글에서는 클로저와 무명 함수가 무엇이며 어떻게 사용되는지 알아보도록 하겠습니다.

클로저 (Closure)

클로저는 내부 함수가 외부 함수의 변수에 접근할 수 있는 함수입니다. 내부 함수는 외부 함수의 변수를 “캡처”합니다. 이는 외부 함수가 호출된 후에도 내부 함수가 외부 함수의 변수에 접근할 수 있게 해줍니다.

클로저를 사용하는 간단한 예제를 살펴보겠습니다.

def outer_function(x):
    def inner_function(y):
        return x + y
    return inner_function

add_five = outer_function(5)
print(add_five(3))  # 출력: 8

위의 예제에서 outer_functioninner_function을 반환합니다. inner_functionouter_function의 파라미터 x를 캡처하고 있으며, 외부에서 호출될 때 y와 함께 x + y를 반환합니다. 따라서 add_five 함수는 5를 기준으로 5 + 3을 계산하여 8을 반환합니다.

클로저는 함수를 반환하고자 할 때 매우 유용합니다. 이를 통해 함수 인스턴스를 생성하고 상태를 유지할 수 있습니다. 예를 들어, 카운터 함수를 생성하는 클로저를 생각해볼 수 있습니다.

def counter():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment

counter1 = counter()
counter2 = counter()

print(counter1())  # 출력: 1
print(counter1())  # 출력: 2
print(counter2())  # 출력: 1

위의 예제에서 counter 함수는 내부 함수 increment를 반환합니다. increment 함수는 외부 함수인 counter의 변수 count를 캡처하며, 호출될 때마다 count를 1 증가시키고 반환합니다. 따라서 counter1counter2는 서로 독립적인 카운터 기능을 가지고 있습니다.

무명 함수 (Lambda)

Python에서는 무명 함수 또한 지원됩니다. 무명 함수는 lambda 키워드를 사용하여 정의됩니다. 이러한 무명 함수는 간단한 함수를 정의하고자 할 때 유용합니다.

다음은 무명 함수가 사용된 예제입니다.

add = lambda x, y: x + y
print(add(3, 5))  # 출력: 8

위의 예제에서 lambda 키워드를 사용하여 add라는 무명 함수를 정의합니다. 이 함수는 두 개의 인자 xy를 받아 더한 값을 반환합니다. 따라서 add(3, 5)3 + 5를 계산하여 8을 반환합니다.

무명 함수는 일회성으로 사용되는 간단한 함수를 정의할 때 편리합니다. 무명 함수는 고차 함수의 인자로 사용하거나, 리스트 등의 데이터 구조에서 필터링이나 매핑 함수로 사용될 수 있습니다.

numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
# even_numbers: [2, 4]

위의 예제에서 filter 함수는 리스트 numbers에서 무명 함수를 사용하여 짝수만 필터링하여 반환합니다. 따라서 even_numbers[2, 4]가 됩니다.

이처럼, 클로저와 무명 함수는 각각 다른 사용 사례를 가지고 있으며, Python에서는 유연한 함수 정의를 위해 두 가지 개념을 지원합니다. 이러한 개념을 적절히 활용하여 코드를 작성하면 프로그래밍을 더욱 효율적으로 할 수 있습니다.