Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python에서 람다 바인딩(Lambda Binding)이란 무엇일까요?


람다 바인딩(Lambda Binding)의 개념

프로그램이나 함수 문장이 실행될 때, 형식 매개변수(formal parameter)의 현재 값은 스택에 저장되고, 해당 문장의 범위 안에서 호출 시 전달된 실제 인자(actual argument)의 값에 바인딩됩니다. 그리고 문장 실행이 종료되면 원래의 형식 매개변수 값이 복원됩니다. 이 프로토콜은 완전히 재귀적으로 동작합니다.

문장 본문 안에서 형식 매개변수가 새로운 값으로 다시 바인딩되는 작업이 발생하더라도, 람다 바인딩 방식은 이러한 모든 과정이 질서 있게 처리되도록 보장합니다.

x에는 하나의 바인딩만 존재한다

여기서 중요한 핵심은 변수 x에 대한 바인딩은 오직 하나뿐이라는 점입니다. 즉, x = 5를 실행하면 미리 존재하던 바인딩의 값만 변경될 뿐, 새로운 바인딩이 생성되지 않습니다. 바로 이러한 특성 때문에 람다의 매개변수에 값을 직접 고정하고 싶을 때 기본 매개변수(default parameter)를 사용하는 것입니다.

예제 코드

def function(x):
    a = lambda x=x: x   # 정의 시점의 x 값을 기본 인자로 저장
    x = 5
    b = lambda: x       # 호출 시점에 x를 참조 (늦은 바인딩)
    return a, b

aa, bb = function(2)
print(aa())  # 2
print(bb())  # 5

실행 결과

2
5

결과 해석

a = lambda x=x: x는 람다가 정의되는 순간 외부 변수 x의 값(2)을 기본 인자로 복사하여 저장합니다. 따라서 이후 x가 5로 변경되더라도 aa()는 여전히 2를 반환합니다. 이를 조기 바인딩(early binding)이라고 부릅니다.

반면 b = lambda: x는 변수 x 자체를 참조합니다. 람다 본문은 호출되는 시점에 x의 현재 값을 조회하므로, bb()는 변경된 값인 5를 반환합니다. 이것이 바로 늦은 바인딩(late binding)입니다.

람다 함수란 무엇인가?

Python은 람다(lambda) 함수라는 기능을 통해 이름이 없는 익명 함수(anonymous function)를 만들 수 있습니다. 람다 함수는 대개 한 줄 이내의 아주 작은 함수이며, 표현식의 평가 결과가 곧 람다가 인자에 적용되었을 때 반환되는 값이 됩니다. 반복문이나 조건 분기처럼 여러 문장이 필요한 경우에는 일반적인 def 함수를 사용하는 것이 좋습니다.