파라미터 x, y 를 더한 값을 리턴시켜주는 함수를 람다식으로 표현하면 아래와 같다.
# 일반 함수
def test_lambda(x, y):
return x + y
# 람다식
lambda x, y: x + y
# lambda : 키워드
# x, y : 람다식 안에서 사용될 파라미터
# x + y : 람다식 안의 처리 코드 (자동으로 리턴)
# 람다식으로 표현
Lambdas = [
lambda x : x ** 2,
lambda x : x ** 3,
lambda x : x ** 4
]
for lambda_func in Lambdas:
print( lambda_func(2) )
# 일반 함수로 하면?
def square(x):
return x ** 2
def power_3(x):
return x ** 3
def power_4(x):
return x ** 4
powers = [ square, power_3, power_4 ]
for f in powers:
print( f(2) )
람다 표현식을 스크립트 안에서 바로 호출하려면 아래와 같이 2가지의 방식이 있다.
# 변수로 만들어서 호출하기
lam = lambda x, y: x + y
r = lam(1, 2)
print(r) # 3
# (lambda 매개변수들: 식)(인수들)
r = (lambda x, y: x + y)(1, 2)
print(r) # 3
# 변수로 만들어서 인수로 넘기기
lam = lambda x, y: x + y
def print_xy(lam):
result = lam
print(result)
print_xy(lam(1, 2)) # 3
# 함수를 호출할 때 인자 값으로 람다식 넣기
def print_xy(func, hello):
print(func(1, 2))
print(hello)
print_xy((lambda x, y: x+y), "hello")
# 변수로 만들어서 인수로 넘기기
list(map(lambda x, y: x + y, [1, 2, 3]))
l = map(int, [i for i in range(1, 10)])
print(l)
lambda 매개변수들: 식1 if 조건식 else 식2
lambda 매개변수들: 식1 if 조건식1 else 식2 if 조건식2 else 식3
import types
f = lambda x,y,z : x+y+z
print(f) # <function <lambda> at 0x10e3a7d30> 람다 함수 자체가 리턴됨
print(type(f)) # <class 'function'> 함수가 리턴됨
print(type(f) == types.LambdaType) # True 람다 타입이기 때문에 True 리턴
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