[Python] Lambda

문성호·2020년 8월 23일

Lambda란?

  • 람다는 익명함수라고도 불리우며 람다 표현식(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과 그 외 type들

  • 이 함수의 타입이 람다(또는 함수)인지 아닌지 검사하는 방법이 있는데, 그것이 LambdaType이다.

  • 파이썬에 내장된 types 모듈에는 FunctionType, LambdaType, GeneratorType과 같은 다양한 type들이 존재한다.

    	- types.FunctionType
    • types.LambdaType
    • types.GeneratorType
    • types.coroutineType
    • types.ASyncGeneratorType
    • types.codeType
    • types.methodType
    • types.BuiltInfunctionType
    • types.BuiltinMethodType
    • 그 외 MethodWrapperType, MethodDescriptorType 등이 존재.

Lambda 사용 예제

  • 다음과 같이 비밀번호의 길이와 대문자가 포함된것을 확인하는 간단한 함수가 있다.
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
profile
오늘을 모아 내일을

0개의 댓글