클로저와 무명 함수 (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_function은 inner_function을 반환합니다. inner_function은 outer_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 증가시키고 반환합니다. 따라서 counter1과 counter2는 서로 독립적인 카운터 기능을 가지고 있습니다.
무명 함수 (Lambda)
Python에서는 무명 함수 또한 지원됩니다. 무명 함수는 lambda 키워드를 사용하여 정의됩니다. 이러한 무명 함수는 간단한 함수를 정의하고자 할 때 유용합니다.
다음은 무명 함수가 사용된 예제입니다.
add = lambda x, y: x + y
print(add(3, 5)) # 출력: 8
위의 예제에서 lambda 키워드를 사용하여 add라는 무명 함수를 정의합니다. 이 함수는 두 개의 인자 x와 y를 받아 더한 값을 반환합니다. 따라서 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에서는 유연한 함수 정의를 위해 두 가지 개념을 지원합니다. 이러한 개념을 적절히 활용하여 코드를 작성하면 프로그래밍을 더욱 효율적으로 할 수 있습니다.