람다는 익명함수라고도 불리우며 람다 표현식(Lambda Expression)이라고도 부릅니다.
일반적인 함수는 아래와 같은 형식을 띈다.
def add(a,b):
return a+b
그러나 Lambda 표현식으로 하면 이런 식으로 바뀐다.
f = lambda a,b : a+b
Lambda 표현식을 쓰는 기본적인 이유는 간단히 구현할 수 있는 함수는 간결하게 쓰기 위해서다.
특히 간단한 인라인 콜백함수나 함수안에서 복잡한 처리를 할 수 없을 때 유용하다고 할 수 있다. 콜백함수란, 어떤 이벤트가 발생했을 때 호출되는 함수인데 콜백함수가 여러블록으로 구성된 실행문이 아니고 다른 컴포넌트에서 사용되지 않는다면 해당 컴포넌트만을 위한 람다 표현식이 적절하다.
Lambdas = [ lambda x : x ** 2, lambda x : x ** 3, lambda x : x ** 4]
for lambda_func in Lambdas:
print(lambda_func(2))
위와 같이 간단한 함수는 List에 저장한 후 이런 식으로 꺼내쓰기에 좋다.
이 함수의 타입이 람다(또는 함수)인지 아닌지 검사하는 방법이 있는데, 그것이 LambdaType이다.
파이썬에 내장된 types 모듈에는 FunctionType, LambdaType, GeneratorType과 같은 다양한 type들이 존재한다.
- types.FunctionType
def check_password(password):
if len(password) < 8:
return 'SHORT_PASSWORD'
if not any(c.isupper() for c in password):
return 'NO_CAPITAL_LETTER_PASSWORD'
return True
lambdas = [lambda password : 'SHORT_PASSWORD' if len(password) < 8 else 'NO_CAPITAL_LETTER_PASSWORD' if not any(c.isupper() for c in password) else "TRUE"]
def check_password_using_lambda(password):
for f in lambdas:
if f(password) is not None:
return f(password)
return True
print (check_password_using_lambda('123')) # SHORT_PASSWORD
print (check_password_using_lambda('12356789f')) # NO_CAPITAL_LETTER_PASSWORD
print (check_password_using_lambda('123456789fF')) # SHORT_PASSWORD