[python 기초] 람다(lambda)

cosmos-JJ·2023년 11월 7일
0

Python

목록 보기
10/11

람다(lambda)

람다(lambda) : 함수의 기능을 매개변수로 전달하는 코드를 좀 더 효율적으로 작성할 수 있게 해주는 기능이다.

# 기본적인 형태
lambda 매개변수: 리턴 값

📌 함수의 매개변수로 함수 전달

콜백 함수(callback function) : 함수의 매개변수에 사용하는 함수

# 매개변수로 받은 함수를 5번 반복하는 함수 생성
def call_repeat(func):
    for i in range(5):
        func()

# hello를 출력하는 함수        
def print_hello():
    print('hello')

# 함수 호출
call_repeat(print_hello)

# hello
# hello
# hello
# hello
# hello

call_repeat 함수는 함수를 매개변수로 받는 콜백함수이며, 위 코드를 실행하면 'hello' 라는 문자열을 5번 반복한다.

📌 map() 함수 & filter() 함수

함수를 매개변수로 사용하는 대표적인 내장 함수로 map()filter()가 있다.

map() : 리스트의 요소를 함수에 넣고 리턴된 값으로 새로운 리스트를 구성
filter() : 리스트의 요소를 함수에 넣고 리턴된 값이 True인 것으로 새로운 리스트 구성

# 기본 생성 방법

map(함수,리스트)

filter(함수,리스트)

example

def test1(num1):
    return num1*num1
def test2(num2):
    return num2 < 3

test_list = [1, 2, 3, 4, 5]

map_test1 = map(test1,test_list)
print(map_test1)
# <map object at 0x0000017CBA02A7D0>
print(list(map_test1))
# [1, 4, 9, 16, 25]

filter_test2 = filter(test2,test_list)
print(filter_test2)
# <filter object at 0x0000017CBA02AF50>
print(list(filter_test2))
# [1, 2]

위 코드를 보면 map 과 filter 를 사용해 새로운 리스트를 생성했을 때 바로 출력하게 되면 map object, filter object 와 같은 제너레이터(generator)가 나오게 된다. 각 변수에 제대로 할당되었는지 보기 위해 리스트타입으로 형변환하여 출력하면 제대로 할당된 것을 알 수 있다.

❗ 제너레이터(generator)는 다음 포스팅할 주제로 좀 더 자세히 다룰 예정이다.

❗ 간단하게 짚고 넘어가자면 파이썬의 특수한 문법 구조로 이터레이터( next() 함수를 적용해 하나하나 꺼낼 수 있는 요소 )를 직접 만들 때 사용하는 코드이다.

📌 인라인 람다(inline lambda)

map() 함수와 filter() 함수는 함수를 매개변수로 받는 것을 알게 되었으니 그 자리에 람다를 통해 직접적으로 함수를 넣을 수 있다.

위에서 구현한 코드를 람다를 이용하여 바꿔보자.

test_list = [1, 2, 3, 4, 5]

map_test1 = map(lambda x:x*x,test_list)
print(list(map_test1))
# [1, 4, 9, 16, 25]

filter_test2 = filter(lambda x:x<3,test_list)
print(list(filter_test2))
# [1, 2]

실행 결과는 이전과 같고, 람다를 사용하면 코드를 더 직관적이고 깔끔하게 작성할 수 있다.

참고

  • 혼자 공부하는 파이썬 (윤인성 지음)
profile
🤍도전하는 건 즐거워요🤍

0개의 댓글