[파이썬] lambda 표현식의 사용

    lambda 표현식은 식 형태로 되어있다고 하여 람다 표현식이라고 부르기도 한다. 람다 표현식은 함수를 간편하게 작성할 수 있어 다른 함수의 인수로 넣을 때 주로 이용하곤 한다.

     

    lambda 매개변수들: 식 

    처럼 사용하고 lambda로 만든 익명함수를 호출하기 위해서는 람다 표현식을 변수에 할당해주면 된다.

    람다 표현식을 변수에 할당해주지 않고 

    lambda x: x+1

    이런 식으로만 사용하게 되면 함수를 호출 할 수 없게 된다. 람다 표현식은 이름이 없는 익명함수를 만들기 때문이다.

    ex)

    a=lambda x:x+10

    a(1) =>11

     

    람다 표현식을 변수에 할당하지 않고 표현식 자체를 바로 호출하려면 람다표현식을 괄호로 묶고 다시 인수를 넣은 괄호를 붙여주면 된다

    (lambda 매개변수들: 식)(인수들)

    ex)

    (lambda x:x+10)(1) => 11

     

    람다표현식에서 주의할 점

    람다 표현식안에서는 새 변수를 만들 수 없다. 따라서 반환 값 부분은 변수없이 식 한 줄로 표현할 수 있어야 한다.

    ex)

    (lambda x:y=10;x+y)(1) => error

     

    람다표현식에서 조건부 표현식을 사용하려면 lambda 매개변수들 : 식1 if 조건식 else 식2 처럼 사용하면 된다.

    ex)

    a = [1, 2, 3, 4]

    list(map(lambda x: str(x) if x % 2 == 0 else x, a))
    [1, '2', 3, '4']

    람다표현식에서 if를 사용했다면 반드시 else도 사용해주어야 하며 elif를 사용할 수 없다. elif를 사용하고자 하면 그냥 def로 함수를 만드는 것이 낫다.

     

    람다표현식에서 map을 이용해 리스트 등의 반복 가능한 객체를 여러개 넣을 수도 있다.

    ex)

    a = [1, 2, 3]
    b = [2, 4, 6]
    list(map(lambda x, y: x * y, a, b)) => [2, 8, 18]

     

    람다표현식에서 filter를 사용하여 반복 가능한 객체에서 특정 조건에 맞는 요소만 가져올 수 있다.

    filter에 지정한 함수의 반환값이 True일 때만 해당 요소를 가져온다.

    filter(함수, 반복가능한객체)의 방식으로 사용한다.

    ex)

    a = [1,2,3,4,5,6,7]
    list(filter(lambda x: x > 2 and x < 5, a)) => [3,4]

     

    람다표현식에서 reduce를 사용하여 반복가능한 객체의 각요소를 지정된 함수로 처리한 뒤 이전 결과와 누적해서 반환할 수 있다.

    reduce(함수, 반복가능한 객체) 의 방식으로 사용한다.

    from functools import reduce

    a = [1, 2, 3]
    reduce(lambda x, y: x + y, a) => 6

    댓글