람다함수(익명함수) - python

이찬·2023년 6월 10일
0

Python

목록 보기
2/17
post-thumbnail

lambda 설명

  • lambda는 함수를 생성할 때 사용하는 예약어로 def와 동일한 역할을 한다.
  • def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰인다.
  • 함수를 간편하게 작성할 수 있어서 다른 함수의 인수로 넣을 때 주로 사용한다.
  • 일반 함수와 마찬가지로 람다 함수는 하나의 표현식으로 여러 인수를 가질 수 있다.

lambda 매개변수 : 매개변수를 활용한 표현식
일반 함수에서와 같이 매개변수 주위에 대괄호를 사용하지 않는다는 점에 유의

① 람다키워드 ②매개변수(또는 바운드 변수) 및 ③ 함수 본체

ex)

adder = lambda x, y: x + y
print (adder (1, 2))

람다 자체는 함수 개체를 반환

string='some kind of a useless lambda'
print(lambda string : print(string))
  • 람다는 print() 함수에 의해 호출 되지 않고 단순히 함수 개체와 그것이 저장된 메모리 위치 를 반환

x="some kind of a useless lambda"
(lambda x : print(x))(x)
  • 람다가 호출되고 전달한 문자열이 콘솔에 출력

Python 내장 함수와 함께 lambda 사용

  • IIFE 는 즉시 호출된 함수 실행을 의미
    => 람다 함수가 정의되는 즉시 호출할 수 있음을 의미
 (lambda x: x + x)(2)

map(함수, iterable)

map() 함수는 iterable의 각 요소를 fuction 함수로 처리해서 결과를 리턴하는 내장함수

items = [1.2, 2.5, 3.7, 4.6]
r = map(int, items)
print(r) # <map object at 0x10e6cf160>
print(list(r)) # [1, 2, 3, 4]

a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
list(map(lambda x: str(x) if x % 3 == 0 else x, a))

map() 함수는 이터레이터를 리턴하기 때문에 요소들을 한번에 보고싶으면 list()로 감싸서 리스트로 만들어주면 된다.

  • lambda 함수 사용
  • map 함수의 function 인자 자리에 lambda 함수를 전달하면 items의 각 요소가 lambda 함수로 처리한 후 그 결과를 돌려주는 이터레이터가 리턴된다
map에 객체 여러개 넣기

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

filter()

filter는 반복 가능한 객체에서 특정 조건에 맞는 요소만 가져오는데, filter에 지정한 함수의 반환값이 True일 때만 해당 요소를 가져옵니다.

  • filter(함수, 반복가능한객체)
def f(x):
 return x > 5 and x < 10
a = [8, 3, 2, 10, 15, 7, 1, 9, 0, 11]
list(filter(f, a))
[8, 7, 9]

reduce()

마지막으로 reduce를 사용해보겠습니다. reduce는 반복 가능한 객체의 각 요소를 지정된 함수로 처리한 뒤 이전 결과와 누적해서 반환하는 함수입니다(reduce는 파이썬 3부터 내장 함수가 아닙니다. 따라서 functools 모듈에서 reduce 함수를 가져와야 함.

from functools import reduce
reduce(함수, 반복가능한객체)

def f(x, y):
...     return x + y
...
>>> a = [1, 2, 3, 4, 5]
>>> from functools import reduce
>>> reduce(f, a)
15

reduce의 반환값이 15가 나왔습니다. 함수 f에서 x + y를 반환하도록 만들었으므로 reduce는 그림과 같이 요소 두 개를 계속 더하면서 결과를 누적합니다.

max()

max(iterable, *[, key, default])
max(arg1, arg2, *args[, key])
  • max() 함수는 iterable한 하나의 위치 인자(iterable)가 주어지면 iterable에서 가장 큰 요소를 리턴하고, 두 개 이상의 위치 인자(arg1 arg2, ..)가 주어지면 위치 인자들 중에서 가장 큰 것을 리턴하는 내장함수이다.

조건부 표현식 사용하기 (if else)

=> lambda 인자: 식1 if 조건식 else 식2

# map을 사용하여 리스트 a에서 3의 배수는 문자열로 리턴
items = [0, 1, 2, 3, 4, 5]
print(list(map(lambda x: str(x) if x % 3 == 0 else x, items)))
['0', 1, 2, '3', 4, 5]

summary

  • 익명 함수라고도 하는 람다는 이름(즉, 식별자)이 필요 없는 작고 제한된 함수입니다.
  • Python의 모든 람다 함수에는 3가지 필수 부분이 있습니다.
  • 람다를 작성하는 구문 : 람다 매개변수: 표현식
  • 람다는 매개변수의 개수에 제한이 없지만 중괄호로 묶지 않습니다.
  • 람다는 기본적으로 반환되는 함수 본문에 1개의 표현식만 가질 수 있습니다.
  • 바이트코드 수준에서는 인터프리터에서 람다와 일반 함수를 처리하는 방법에 큰 차이가 없습니다.
  • Lambda는 다음 구문을 통해 IIFE를 지원합니다. (lambda 매개변수: 표현식)(인수)

Lambda는 일반적으로 다음 Python 내장 기능과 함께 사용
Filter: filter(람다 매개변수: 표현식, 반복 가능한 시퀀스)
Map: map(람다 매개변수: 표현식, 반복 가능한 시퀀스)
Reduce: reduce(람다 매개변수 1, 매개변수 2: 표현식, 반복 가능한 시퀀스)

profile
Kyunghee univ. IE 21

0개의 댓글