Python

GreenBean·2022년 2월 21일
0
post-thumbnail

Python

lambda 함수란?

  • 람다(lambda) 함수는 적절한 곳에 잘 쓰인다면 코드가 간결해 보이지만, 그렇지 않고 남용하게 된다면 코드가 매우 지저분해 보이는 효과 있음
  • 원래 함수라는게 복잡한 명령들을 편하게 반복해서 사용할 수 있도록 모아두는 역할을 하는데, def 를 이용해서 다른 곳에 함수를 만들고 그걸 또 호출해서 부르기까지의 수고가 필요하지 않은 그런 가벼운 함수들을 위해서 만들어진게 람다 함수

선언 방법

lambda 인자:표현식
  • lambda 라는 키워드를 입력하고 뒤에는 매개변수(인자)를 입력하고 콜론(:)을 넣은 다음에 그 매개변수(인자)를 이용한 동작들을 적으면 됨
    • 예를 들면 인자로 들어온 값에 2를 곱해서 반환한다고 하면 lambda x : x * 2

Tip! 람다 함수와 일반 함수의 비교

# 짝수를 판별하는 함수를 만드려고 할 때

# 일반 함수
def is_even(x):
    return x % 2 == 0

# 람다 함수
is_even = lambda x : x % 2 == 0

# 호출 방법은 동일
is_even(1) # False
is_even(2) # True

lambda 함수와 map 함수

map(함수, 리스트나 튜플)
  • map 함수는 리스트나 튜플에 어떤 특별한 처리를 할때 사용하는 함수
    • 첫번째 인자인 함수는 두번째 인자로 들어온 리스트나, 튜플에 특별한 가공 처리를 하는 함수이며, 사용자가 직접 함수를 정의
    • 두번째 인자인 리스트나 튜플바꾸고자 하는 데이터들을 집어 넣음
# 리스트의 모든값에 2씩 더해서 새로운 리스트를 만드려고 할 때

# 일반 함수
def plus_two(x):
    return x + 2
 
result1 = list(map(plus_two, [1, 2, 3, 4, 5]))
print(result1)
>>> [3, 4, 5, 6, 7]

# 람다 함수
result2 = list(map((lambda x: x + 2), [1, 2, 3, 4, 5]))
print(result2)
>>> [3, 4, 5, 6, 7]

# 람다 함수
result3 = list(map((lambda x : x + 2), range(1, 6)))
print(result3)
>>> [3, 4, 5, 6, 7]

lambda 함수와 filter 함수

filter(함수, 리스트나 튜플)
  • filter 함수는 map 함수와 비슷하게 첫번째 인자로 함수를 받고 리스트나 튜플을 두번째 인자로 받음
    • 첫번째 인자인 함수에는 두번째 인자로 들어온 리스트나 튜플을 하나하나씩 받아서 필터링할 함수를 넣음
    • 두번째 인자에는 리스트나 튜플을 집어 넣음
# 짝수들만 걸러서 리스트를 다시 만드려고 할 때

# 일반 함수
def is_even(x):
    return x % 2 == 0

result1 = list(filter(is_even, range(10)))
print(result1)
>>> [0, 2, 4, 6, 8]

# 람다 함수
result2 = list(filter((lambda x: x % 2 == 0), range(10))) 
print(result2)
>>> [0, 2, 4, 6, 8]

Tip! 추가 내용

# 일반 함수
def func(a):
    return a+1

# 람다 함수
func = lambda a: a+1
  • 파이썬의 람다 기능익명 함수(Anonymous), 즉 이름이 없는 함수를 정의하기 위한 용도로 사용
    • 참고로 컴퓨터 분야에서 정의는 없던 것에 대한 구체적인 생성을 의미하며, 선언은 일단 이름만 붙여두고 구체적인 생성은 다른 곳에서 대신하는 것을 의미
# 인자를 두개 받아 받은 인자값을 합해 반환하는 람다 함수
func = lambda a,b: a+b

r = list(map(lambda a,b: a+b, [1,2,3], [10,20,30]))
print(r) 
>>> [11, 22, 33]
  • 람다 함수를 이용하여 함수를 반환하는 함수를 정의할 수 있음
    • 클로저(closure)라고도 함
# 람다 함수 사용 O
def makeFunc(n):
    return lambda a : a % n == 1
isOdd = makeFunc(2)
print(isOdd(11))
>>> True

# 람다 함수 사용 X
def makeFunc(n):
    def func(a):
        return a % n == 1
    return func
  • 람다 함수를 사용하지 않았을 때의 코드에서는 함수의 이름(func)을 불필요하게 부여해야 함
    • 람다를 통한 함수의 정의는 제약이 많음
    • 람다 함수는 반드시 반환값에 대한 단 한줄의 코드로만 구성되어야 한다는 점
    • 그렇다면 람다 함수에서 어떤 논리적인 조건 처리는 어떻게 구현할 수 있을까?
# 들여쓰기
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
r = list(
        map(
            lambda x: 
                'BIG' if x > 5 
                else 'SMALL' if x < 5 
                else 'MIDDLE',
            a
        )
    )
print(r)
>>> ['SMALL', 'SMALL', 'SMALL', 'SMALL', 'MIDDLE', 'BIG', 'BIG', 'BIG', 'BIG', 'BIG']

# 들여쓰기 제거
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
r = list(map(lambda x: 'BIG' if x > 5 else 'SMALL' if x < 5 else 'MIDDLE', a))
print(r)
>>> ['SMALL', 'SMALL', 'SMALL', 'SMALL', 'MIDDLE', 'BIG', 'BIG', 'BIG', 'BIG', 'BIG']
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글