본문 바로가기
Python

[Python] Lambda 실습

by UnoCode 2020. 6. 28.

오늘의 실습은 이 함수를 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 = [ 

]

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
  • 아래의 lambdas 리스트안에 두개의 람다표현식을 작성해야하며
  • 주석으로 표시된 프린트가 출력결과로 나와야 합니다.

 

ㄷㄷ 이대로 나뚜지 왜 람다로..

 

 

위 코드를 람다로 구현하기 위해서는 2개의 람다식이 필요한데요..

 

1.

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

2

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

 

1번부터 람다 식으로 바꾸어 볼까요?

 

check_password_using_lambda 함수에서 for문을 통해 람다식을 다 검사 하므로

 

리스트안에 람다식을 작성합니다.

 

lambdas = [ 
  lambda x: "SHORT_PASSWORD" if len(x) < 8 else None,
]
  • 아규먼트 : x
  • 참일 경우 반환값 "SHPRT_PASSWORD"
  • 거짓일 경우 None

여기서 왜 거짓일 경우 None을 반환 할까요?

 

네!! 람다식을 호출하는 check_password_using_lambda 함수에서 통과되면 None이 되야 해당 함수가 안돌아가기 때문입니다.

 

def check_password_using_lambda(password):

    for f in lambdas:
        if f(password) is not None:
            return f(password)

    return True

None 말고 다른 값이 호출이 된다면 결국 True가 호출 되겠군요.

 

2번 람다 식으로 바꾸기

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

 

  • 아규먼트 : x

     

  • 참일 경우 반환값 "NO_CAPITAL_LETTER_PASSWORD" 거짓일 경우 None
  • any는 전달받은 자료형의 element 중 하나라도 True일 경우 True를 돌려준다.
  • 거짓일 경우 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
​

 

결과값

 

'Python' 카테고리의 다른 글

[Python] Multiprocessing  (2) 2020.06.29
[Python] Thread  (0) 2020.06.29
[Python] import types  (0) 2020.06.28
[Python] Lambda  (0) 2020.06.27
[Python] Generator Or Iterator 코드 분석 실습  (0) 2020.06.27

댓글