람다는 인라인 함수를 정의할 때 사용하며, 익명함수 또는 람다 표현식이라고 부릅니다.
일반적으로 사용하는 함수와는 아래의 차이점이 있습니다:
일반적인 형식은 다음과 같습니다.
lambda arg1, arg2, ... , argM : 표현식
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}가 있습니다.")
첫번째 코드 블럭의 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문을 사용해주어야 합니다.