람다 함수(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))
위와 같은 형식으로 표현할 수 있는 것이다.
람다 함수는 콜백 함수(다른 함수에서 값을 호출하는 함수)를 만들때,
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)
위와 같이 더 짧게 표현 할 수 있으며,
또 함수의 이름을 정의하지 않고 단기간에 일시적으로 필요할때 주로 사용된다.
람다 함수를 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 공식문서에서 확인 가능하다.
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)
👍🏼👍🏼👍🏼👍🏼👍🏼