Python lambda expressions

minch·2021년 7월 12일
1

Python

목록 보기
10/13
post-thumbnail

lambda expressions

람다 함수(lambda expressions)는 인라인 함수를 작성할 때 사용하는 것으로
함수의 이름을 지정해줄 필요가 없기 때문에 익명 함수(anonymous functions)라고도 한다.

def add_function(x,y,z):
	return x+y+z

단순한 덧셈을 구하는 함수를,

f = lambda x,y,z : x+y+z
print(f(1,2,3))

위와 같은 형식으로 표현할 수 있는 것이다.

When to use?

람다 함수는 콜백 함수(다른 함수에서 값을 호출하는 함수)를 만들때,

def callback(func, count):
    for i in range(count):
        func(i)


def print_hello(number):
    print("Hello", number)


callback(print_hello, 8)

# 결과값
Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
Hello 6
Hello 7

use lambda

def callback(func, count):
    for i in range(count):
        func(i)
        
callback(lambda number: print("Hello", number), 8)

위와 같이 더 짧게 표현 할 수 있으며,
또 함수의 이름을 정의하지 않고 단기간에 일시적으로 필요할때 주로 사용된다.

Assignment

1. types module

람다 함수를 types 모듈을 이용하여 확인해보면,

import types

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

print(f)
print(type(f))
print(type(f) == types.LambdaType)

출력

<function <lambda> at 0x7feed15093a0>
<class 'function'>
True

function class에 속하고, types.LambdaType인 것을 확인 할 수 있다.

이런 types 모듈은 새로운 동적형을 생성하거나, 위처럼 데이터의 type을 확인하는 용도로 쓰인다.

types 모듈에 대한 그 종류나 추가적인 설명은 Python 공식문서에서 확인 가능하다.

2.

using normal

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

using lambda expressions

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
]

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

password가 대문자를 포함하고 길이가 8글자 이상인지 판단하는 함수를
일반 함수를 쓰는 경우와 lambda를 사용하는 경우 두 가지 형태로 표현 가능하다.

개인적으로 위의 예시에서는 lambda보다 일반 함수로 나타내는 것이 더 간단하고, 이해하기가 쉬운 것 같다.

참조
(https://www.machinelearningplus.com/python/lambda-function/)
(https://m.blog.naver.com/lai4/221775340153)

1개의 댓글

comment-user-thumbnail
2021년 7월 16일

👍🏼👍🏼👍🏼👍🏼👍🏼

답글 달기