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