익명 함수
매우 짧은 콜백 함수를 정의했지만 def를 사용하여 이렇게 긴 함수를 작성하고 싶지 않은 적이 있나요? 대답은 '예'입니다.
Python은 람다를 사용하여 익명 함수를 생성합니다. 즉, 더 이상 표준 형태의 def 문을 사용하여 함수를 정의하지 않습니다.
익명 함수는 주로 다음과 같은 특징을 가지고 있습니다.
lambda는 단지 표현식일 뿐이고 함수 본문은 def보다 훨씬 간단합니다.
람다의 본문은 코드 블록이 아닌 표현식입니다. 제한된 논리만 람다 식으로 캡슐화할 수 있습니다.
람다 함수에는 자체 네임스페이스가 있으며 자체 매개변수 목록 외부 또는 전역 네임스페이스에 있는 매개변수에 액세스할 수 없습니다.
기본 구문
lambda [arg1 [,arg2,.....argn]]:expression
예:
# -*- coding: UTF-8 -*- sum = lambda num1 , num2 : num1 + num2; print( sum( 1 , 2 ) )
출력 결과:
3
참고: 람다 표현식을 사용하면 간단한 함수를 정의할 수 있지만 사용이 제한됩니다. 단일 표현식만 지정할 수 있으며 해당 값은 최종 반환 값입니다. 즉, 다중 명령문, 조건식, 반복, 예외 처리 등을 포함한 다른 언어 기능을 포함할 수 없습니다.
익명 함수에는 주의가 필요한 특별한 문제가 있습니다. 예를 들어 위의 예를 변경해 보세요.
# -*- coding: UTF-8 -*- num2 = 100 sum1 = lambda num1 : num1 + num2 ; num2 = 10000 sum2 = lambda num1 : num1 + num2 ; print( sum1( 1 ) ) print( sum2( 1 ) )
결과가 어떻게 될 것 같나요? 첫 번째 출력은 101이고 두 번째 출력은 10001이며 결과는 그렇지 않고 출력 결과는 다음과 같습니다.
10001 10001
이는 주로 람다 표현식의 num2가 자유 변수이고 값이 런타임에 바인딩되기 때문입니다. 정의된 시점에 바인딩되는데, 이는 함수의 기본값 매개변수 정의와 다릅니다. 따라서 이러한 상황이 발생하면 첫 번째 해결 방법을 사용하는 것이 좋습니다.