[Python] lambda practice

최창현·2022년 1월 6일
0

다음과 같이 비밀번호의 길이와 대문자가 포함된것을 확인하는 간단한 함수가 있다.

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

함수에 있는 if문 두개를 람다 표현식을 이용하여 작성하려면
두개의 람다 표현식이 필요하다.

첫번째 if문

    if len(password) < 8:
        return 'SHORT_PASSWORD'

두번째 if문

 if not any(c.isupper() for c in password):
        return 'NO_CAPITAL_LETTER_PASSWORD'

먼저 첫번째 if문을 람다식으로 바꾸기 시작.
check_password_using_lambda 함수에서 for문을 통해 람다식을 다 검사 하므로
리스트안에 람다식을 작성.

lambdas = [
	lambda x : "SHORT_PASSWORD" if len(x) < 8 else None,
]

여기서 else의 출력값으로 None을 반환한 이유는 람다식을 호출하는 check_password_using_lambda함수에서 통과되면 None이 되야 해당 함수가 실행되지 않기 때문이다.

두번째 if문

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, 
]

전체 소스코드는 다음과 같다.

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('123456789fF') )    # True
profile
chch_oi

0개의 댓글