본문 바로가기
python& Django

파이썬 : 람다 (lambda)

람다식 : lambda experssion

람다 표현식이라고 하며 이름이 없는 함수, 즉 익명 함수이다.

함수를 간편하게 작성할 수 있으며, 주로 다른 함수의 인수(파라미터)로 넘겨줄 때 많이 사용된다.

 

파라미터 x, y  를 더한 값을 리턴시켜주는 함수를 람다식으로 표현하면 아래와 같다.

# 일반 함수
def test_lambda(x, y):
    return x + y

# 람다식
lambda x, y: x + y

# lambda : 키워드
# x, y : 람다식 안에서 사용될 파라미터
# x + y : 람다식 안의 처리 코드 (자동으로 리턴)

 

람다식 호출하기

람다식을 스크립트 안에서 바로 호출하려면 아래와 같이 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 이라는 변수는 함수이며, 인자값 2개를 받는다.

1, 2 는 각각 람다식의 매개변수 x, y 이며, 그 값을 받아 x + y 의 식을 처리하여 리턴한다.

 

람다식에 파라미터를 전달하여 매개변수 x, y 로 사용하고 싶을 때는 ()를 사용한다.

(lambda x, y: x + 1)(param1, param2)

 

 

함수의 인자로 람다식 넣기

# 변수로 만들어서 인수로 넘기기
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")

 

람다식의 대표적인 예는 map 내장 함수이다.

# 변수로 만들어서 인수로 넘기기
list(map(lambda x, y: x + y, [1, 2, 3]))

l = map(int, [i for i in range(1, 10)])
print(l)

map 의 API 문서를 보면 map(function, iterable, ...) 와 같이 되어있다.

즉, 인자값 첫번 째는 함수이고, 두번 째는 반복 가능한 객체이다.

첫번 째가 함수이기 때문에, 그 부분에 람다식을 넣을 수 있는 것이다. 마찬가지로 filter, reduce 에 유용하게 사용할 수 있다.

filter(function, iterable)

reduce(function, iterable) - 파이썬3? 이상 부터 내장 함수가 아니라서 import 시켜줘야 한다.

 

람다식 표현에 if 사용하기

lambda 매개변수들: 식1 if 조건식 else 식2

조건 식에 : 를 사용하지 않는다.

else 는 반드시 있어야 한다.

elif  는 사용할 수 없으며, 다중 조건을 걸기 위해서는 if else 를 다중으로 사용한다.

따라서, 다중 조건이 여러개 이상 필요한 경우 그냥 일반 함수를 작성하는 것이 더 낫다.

lambda 매개변수들: 식1 if 조건식1 else 식2 if 조건식2 else 식3

 

map 에 iter 인자 부분에 복수의 파라미터 전달하기

a = [1,2,3]
b = [4,5,6]
r = list(map(lambda x, y: x * y, a, b))
print(r) # [4, 10, 18]

 

일반 람다식으로 구현하면 아래와 같이 된다.

a = [1,2,3]
b = [4,5,6]

def test_multiple(func, a, b):
    lst = []
    for i in range(len(a)):
        lst.append(func(a[i], b[i]))
    return lst

l = test_multiple(lambda x, y: x * y, a, b)
print(l) # [4, 10, 18]

 

#정리

- 복잡한 연산이나 조건문을 사용해야 하는 경우에는, 되도록 람다식을 피한다.

- 람다식 안에서 새로운 변수를 생성할 수 없다.

- 리스트(딕셔너리, 세트) 표현식으로 처리할 수 있는 경우에는, 람다식 보다 각 자료형의 표현식을 사용한다. (가독성, 속도)

 

'python& Django' 카테고리의 다른 글

파이썬 : file input output  (0) 2020.10.15
파이썬 : If 조건문  (0) 2020.10.08
파이썬 : 자료형 (dictionary) -작성 중  (0) 2020.10.08
파이썬 : 자료형 튜플(tuple)  (0) 2020.10.08
파이썬 : 자료형 (List)  (0) 2020.10.08