[Python] 람다표현식

김상웅·2022년 5월 30일
0

[파이썬]

목록 보기
6/17

📌 람다표현식이란?


  • 람다는 인라인 함수를 정의할 때 사용하며, 익명함수 또는 람다 표현식이라고 부릅니다.

  • 일반적으로 사용하는 함수와는 아래의 차이점이 있습니다:

    1. 함수의 이름을 갖고 있지 않습니다.
    2. 인라인 형식의 간단한 표현식만 사용 가능합니다.
    3. return문을 사용할 수 없지만 표현식의 결과가 반환됩니다.
  • 일반적인 형식은 다음과 같습니다.

lambda arg1, arg2, ... , argM : 표현식
  • 언제 쓰일까?
    1. 간단한 인라인 콜백함수를 만들 때 유용합니다.
      (콜백함수가 여러 블록으로 구성된 실행문이 아니고, 다른 컴포넌트에서 사용되지 않는다는 전제)
    2. 함수 안에서 복잡한 처리를 할 수 없을 때 유용합니다.

✅ 예제 통해 알아보기


1번 예제

print문으로 출력되는 출력 결과: <class "function">
types 모듈에 LambdaType 외의 다른 타입: 34개

import types

f = lambda x,y,z : x+y+z

print(f)
print(type(f))
print( type(f) == types.LambdaType)

types_number = (len([i for i in dir(types) if not i.startswith("__")]))
types_kind = dir(types)
print(f"types 모듈은 총 {types_number}개이고 {types_kind}가 있습니다.")


2번 예제

첫번째 코드 블럭의 if문 2개를 람다 표현식으로 작성하기

다음은 비밀번호 길이와 대문자가 포함된 것을 확인하는 함수입니다.

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 x: "SHORT_PASSWORD" if len(x) < 8 else None,
    lambda x: "NO_CAPITAL_LETTER_PASSWORD" if not any(
        c.isupper() for c in x) else None
]

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('123456789F') )    # True

람다표현식 사이에는 반드시 쉼표를 넣어주어야 합니다.
람다표현식과 if 구문을 사용할 경우에는 else문을 사용해주어야 합니다.

profile
누구나 이해할 수 있도록

0개의 댓글