클로저와 무명 함수 (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에서는 유연한 함수 정의를 위해 두 가지 개념을 지원합니다. 이러한 개념을 적절히 활용하여 코드를 작성하면 프로그래밍을 더욱 효율적으로 할 수 있습니다.