Python - lambda

김현우·2020년 7월 27일
0

What is Lambda?👼

인라인 함수를 정의할 때 사용하며 익명 함수(anonymous functions) 또는 람다 표현식(lambda expression)이라고 부름.

우리가 배웠던 일반함수는

def name(arg1, arg2 ...):
    block of statement

이며, 람다와의 차이점은
1. 이름의 유무
2. 일반 함수는 내부에서 처리하는 로직들을 여러문장으로 작성하는 불록으로 구성 할 수 있지만, 람다 표현식의 본체에는 인라인 형식의 간단한 표현식만 올 수 있고 return문이 없어도 표현석의 결과가 리턴됨.

람다의 가장 일반적인 형식

lambda argument1, argument2, ... argumentN : expression using arguments

일반 함수와의 차이

💡 사용 방법
1. 매개변수 두개를 받아 두수의 합을 리턴하는 간단한 함수

# 일반함수
def add(n,m):
    return n+m
print(add(2,3))
# 결과값 5
 
# 람다식으로 표현
print((lambda n,m:n+m)(2,3))
# 결과값 5
  1. 람다식 안에서 조건 사용 가능

print((lambda n,m: n if n%2==0 else m)(1,3))
# 결과값 3
print((lambda n,m: n if n%2==0 else m)(2,3))
# 결과값 2

Assignment

  1. 다음 코드를 실행해보고 print문으로 출력되는 출력결과를 확인해보고 types 모듈에 LambdaType 외에도 어떤 타입들이 있는지 조사해 보세요.
import types

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

print(f)
print(type(f))
print( type(f) == types.LambdaType)
>> <function f at 0x7fbd339684c0>
>> <class 'function'>
>> True
  • FunctionType
  • GeneratorType
  • CoroutineType
  • AsyncGeneratorType
  • CellType
  • MethodType
  • BuiltinFunctionType
  • BuiltinMethodType
  • WrapperDescriptorType
    등등
  1. 다음과 같이 비밀번호의 길이와 대문자가 포함된것을 확인하는 간단한 함수가 있습니다.
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문 두개를 람다표현식을 이용하여 다음과 같은 형식으로 작성해 보세요.

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

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

solution )

  lambdas = [
    lambda password: 'SHORT_PASSWORD' if len(password) < 8 else None,
    lambda password: 'NO_CAPITAL_LETTER_PASSWORD' if not any
     (c.isupper() for c in password) else None
	]
profile
코딩을 잘하는 개발자가 되자!

0개의 댓글