Python 강좌 : 제 21강 - 람다 함수

Python lambda functions

Python 강좌 : 제 21강 - 람다 함수
[ Python ] - 윤대희

람다(lambda) 함수


람다(lambda) 함수는 사용자 정의 함수와 비슷한 역할을 합니다.

함수명을 정해 사용하는 사용자 정의 함수와 다르게 이름없이 사용하는 익명 함수입니다.

간단한 기능을 정의해 한 번만 사용하고 사라지게 됩니다.

람다 함수는 함수명 = lambda 변수명 : 수식의 형태로 사용합니다.

변수명x, y, z 등의 값을 사용하며, 수식은 변수명에서 사용된 값을 활용합니다.

lambda를 사용하여 한 줄로 되어있는 수학 함수를 생성하거나 특정 형태나 형식 등으로 변환할 수 있습니다.

간단한 수학함수가 필요한 경우 람다 함수를 호출하여 사용합니다.



함수 생성


f = lambda x, y: x + y

print(f(1, 2))
print(f([1, 2], [3, 4]))
print(f("YUN", "DAEHEE"))
결과
3
[1, 2, 3, 4]
YUNDAEHEE


함수명=lambda 매개변수1, 매개변수2, ... : 반환식을 사용하여 람다 함수를 선언할 수 있습니다.

함수명(인수1, 인수2 ...)를 사용하여 함수를 호출합니다.

  • Tip : 정수, List, 문자열 등을 사용 할 수 있습니다.



기본값 설정


f = lambda x, y=3: x + y

print(f(1))
print(f(3, 3))
결과
4
6


매개변수기본값을 할당할 수 있습니다.

기본값이 할당되면 함수를 호출할 때 매개변수를 채우지 않으면 기본값으로 사용합니다.



다중 입력


f = lambda *x: max(x) * 2

print(f(1, 3, 7))
결과
14

매개변수*를 입력할 경우 개수를 지정하지 않고 매개변수를 지정할 수 있습니다.

여러개의 매개변수들이 포함될 수 있습니다.

단, 반환값은 하나의 값만 반환할 수 있습니다.



다중 반환


f = [lambda x: x + 1, lambda x: x + 2, lambda x: x + 3]

print(f[0](1))
print(f[1](1))
print(f[2](1))
결과
2
3
4

List로 사용할 경우 대괄호([]) 를 사용하여 선택된 수식으로 반환됩니다.

List가 아닌, Dict로 사용할 경우, 원하는 Key 값을 통해 특정 람다 함수를 사용할 수도 있습니다.



최대/최소


L = [[9, 1], [8, 2], [7, 3], [6, 4]]

max1 = max(L, key=lambda x: x[0])
max2 = max(L, key=lambda x: x[1])
min1 = min(L, key=lambda x: x[0])
min2 = min(L, key=lambda x: x[1])

print(max1)
print(max2)
print(min1)
print(min2)
결과
[9, 1]
[6, 4]
[6, 4]
[9, 1]

최댓값 함수와 최솟값 함수에도 람다식을 적용하여 특정 최대/최소를 검출할 수 있습니다.

1차원 이상의 객체에서 특정 요소에 있는 값을 기준으로 찾으려 할 때, 어떤 요소의 값을 기준으로 찾을지 설정할 수 있습니다.

lambda x: x[0]라면 첫 번째 요소의 값으로 검색을 시작하며, lambda x: x[1]라면 두 번째 요소의 값으로 검색을 시작합니다.



정렬


L = ["가", "각", "감", "갂", "갃", "+", "/", "!", "간", "]", "[", "\\"]

L.sort(key=lambda x: x)

print(L)

print([ord(i) for i in L])
결과
[’!’, ‘+’, ‘/’, ‘[’, ‘\’, ‘]’, ‘가’, ‘각’, ‘갂’, ‘갃’, ‘간’, ‘감’]
[33, 43, 47, 91, 92, 93, 44032, 44033, 44034, 44035, 44036, 44048]

Python에서 사용되는 모든 문자열은 유니코드(Unicode)로 간주합니다.

그러므로, 문자열을 정렬할 때 각 문자들을 유니코드로 변경하고 인스턴스 끼리의 비교(<, >)를 진행하게 됩니다.

정렬에 사용되는 람다식의 x는 “가”, “각”, “감”, … “\“이 되며, 이 값들을 유니코드로 변경하여 대소 비교를 통해 정렬합니다.

만약, 정렬하려는 반복 가능한 객체(iterable)에 서로 다른 데이터 타입이 존재한다면, '<' not supported between instances of 'int' and 'str'등 의 오류가 발생합니다.

이럴 경우에는 명시적으로 요솟값을 str이나 int로 변경하여 정렬합니다.



복합 정렬


L = [[3, "d"], [5, "c"], [1, "a"], [0, "b"], [0, "a"]]
L1 = sorted(L, key=lambda x : -x[0])
L2 = sorted(L, key=lambda x : x[1]) 
L3 = sorted(L, key=lambda x : [x[0], x[1]])

print(L)
print(L1)
print(L2)
print(L3)
결과
[[3, ‘d’], [5, ‘c’], [1, ‘a’], [0, ‘b’], [0, ‘a’]]
[[5, ‘c’], [3, ‘d’], [1, ‘a’], [0, ‘b’], [0, ‘a’]]
[[1, ‘a’], [0, ‘a’], [0, ‘b’], [5, ‘c’], [3, ‘d’]]
[[0, ‘a’], [0, ‘b’], [1, ‘a’], [3, ‘d’], [5, ‘c’]]

정렬하려는 객체가 2차원 이상이라면, 비교하는 x에는 [3, “d”], [5, “c”], … [0, “a”]가 됩니다.

만약, 특정 원소를 지정하지 않고 key=lambda x : x처럼 사용한다면, 첫 번째 원소를 기준으로 정렬하게 됩니다.

특정한 원소를 기준으로 정렬한다면, 어떤 값을 기준으로 정렬할지 표기합니다.

여기서, 정렬 함수는 기본적으로 오름차순 형태로 정렬합니다.

그러므로, 비교하는 원소를 음수로 변경한다면 내림차순으로 변경할 수 있습니다.

여러가지 기준으로 정렬하려고 한다면, 객체로 감싸 정렬 우선순위를 할당할 수 있습니다.

예제의 L3의 경우 첫 번째 원소를 기준으로 정렬하면서, 두 번째 원소를 차선으로 정렬하게 됩니다.

즉, [0, "b"][0, "a"]를 비교할 때, 0이 동일하므로, 그 다음 조건으로 ab를 대상으로 다시 정렬하게 됩니다.



Book Image

개정판이 출간됐습니다!

C#과 파이썬을 활용한 OpenCV 4 프로그래밍 (개정판)

컴퓨터 비전 기초 이론부터 머신러닝을 활용한 영상 처리 프로젝트까지

  • C#과 파이썬용 OpenCV의 데이터 형식과 행렬 및 배열 연산
  • 이미지/동영상/카메라를 활용한 입출력과 결과 저장
  • 전처리 과정과 정보를 탐색하기 위한 이미지 변형
  • 유의미한 정보를 검출하기 위한 이미지 변환
  • 이미지에서 정보를 검출 및 인식
  • 객체 검출을 포함한 모션 추적
  • K-means, KNN, SVM 등의 머신러닝 알고리즘 적용 방법
  • 카페(Caffe), 다크넷(Darknet), 텐서플로 모델을 활용한 딥러닝 모듈 적용 방법
  • Tesseract-OCR과 C# OpenCvSharp4를 활용한 프로젝트
  • 텐서플로와 Python OpenCV4를 활용한 프로젝트
  • 윤대희 저 | 위키북스

    [yes24 바로가기] [알라딘 바로가기] [교보문고 바로가기]

    후원하기


    ⤧  Previous post Python 강좌 : 제 20강 - 사용자 정의 함수 ⤧  Next post Python 강좌 : 제 22강 - 필터 함수
    Python Category