이 자습서에서는 람다 함수를 정의하는 구문에서 코드 예제를 통해 다양한 사용 사례에 이르기까지 Python의 람다 함수에 대해 모두 배웁니다.

Python에서 람다는 간결한 구문을 가진 익명 함수이며 다른 유용한 내장 함수와 함께 사용할 수 있습니다. 이 튜토리얼이 끝나면 람다 함수를 정의하는 방법과 일반 Python 함수보다 사용을 고려해야 하는 경우를 알게 될 것입니다.

의 시작하자!

Python Lambda 함수: 구문 및 예

다음은 Python에서 람다 함수를 정의하는 일반적인 구문입니다.

lambda parameter(s):return value

위의 일반 구문에서:

  • 람다는 람다 함수를 정의하는 데 사용해야 하는 키워드이며 그 뒤에 함수가 취해야 하는 하나 이상의 매개변수가 옵니다.
  • 매개변수와 반환 값을 구분하는 콜론이 있습니다.

💡 람다 함수를 정의할 때 한 줄의 코드에 걸쳐 있는 표현식을 평가하여 반환 값이 계산되는지 확인해야 합니다. 우리가 예제를 코딩할 때 이것을 더 잘 이해하게 될 것입니다.

Python Lambda 함수 예제

람다 함수를 이해하는 가장 좋은 방법은 일반 Python 함수를 람다 함수로 다시 작성하는 것부터 시작하는 것입니다.

👩🏽‍💻 Python REPL 또는 koreantech.org의 온라인 Python 편집기에서 코드를 작성할 수 있습니다.

#1. 숫자 num을 인수로 받아 숫자의 제곱을 반환하는 다음 함수 square()를 고려하십시오.

def square(num):
    return num*num

인수를 사용하여 함수를 호출하고 올바르게 작동하는지 확인할 수 있습니다.

>>> square(9)
81
>>> square(12)
144

이 람다 식을 변수 이름(예: square1)에 할당하여 함수 정의를 더 간결하게 만들 수 있습니다. square1 = lambda num: num*num 그런 다음 임의의 숫자를 인수로 사용하여 square1 함수를 호출할 수 있습니다. 그러나 우리는 람다가 익명 함수라는 것을 알고 있으므로 변수에 할당하는 것을 피해야 합니다.

square() 함수의 경우 매개변수는 num이고 반환 값은 num*num입니다. 이들을 식별한 후 다음과 같이 람다 식에 연결하고 인수를 사용하여 호출할 수 있습니다.

>>> (lambda num: num*num)(2)
4

이것이 바로 함수를 정의한 직후에 호출하는 즉시 호출 함수 표현식의 개념입니다.

#2. 다음으로 숫자 num1과 num2를 가져와서 합계 num1 + num2를 반환하는 또 다른 간단한 함수 add()를 다시 작성해 보겠습니다.

def add(num1,num2):
    return num1 + num2

두 개의 숫자를 인수로 사용하여 add() 함수를 호출해 보겠습니다.

>>> add(4,3)
7
>>> add(12,5)
17
>>> add(12,6)
18

이 경우 num1과 num2는 두 개의 매개변수이고 반환 값은 num1 + num2입니다.

>>> (lambda num1, num2: num1 + num2)(3,7)
10

Python 함수는 매개변수에 대해 기본값을 사용할 수도 있습니다. add() 함수의 정의를 수정하고 num2 매개변수의 기본값을 10으로 설정해 보겠습니다.

def add(num1, num2=10):
    return num1 + num2

다음 함수 호출에서:

  • 첫 번째 함수 호출에서 num1의 값은 1이고 num2의 값은 3입니다. 함수 호출에서 num2의 값을 전달할 때 해당 값이 사용됩니다. 함수는 4를 반환합니다.
  • 그러나 하나의 인수(num1은 7)만 전달하면 num2에 기본값 10이 사용됩니다. 함수는 17을 반환합니다.
>>> add(1,3)
4
>>> add(7)
17

특정 매개변수에 대한 기본값을 람다 표현식으로 취하는 함수를 작성할 때 매개변수를 정의할 때 기본값을 지정할 수 있습니다.

>>> (lambda num1, num2 = 10: num1 + num2)(1)
11

Python에서 Lambda 함수는 언제 사용해야 합니까?

이제 Python에서 람다 함수의 기본 사항을 배웠으므로 다음은 몇 가지 사용 사례입니다.

  • 반환 표현식이 한 줄의 코드인 함수가 있고 동일한 모듈의 다른 곳에서 함수를 참조할 필요가 없는 경우 람다 함수를 사용할 수 있습니다. 또한 이를 이해하기 위해 몇 가지 예를 코딩했습니다.
  • map(), filter() 및 reduce()와 같은 내장 함수를 사용할 때 람다 함수를 사용할 수 있습니다.
  • Lambda 함수는 목록 및 사전과 같은 Python 데이터 구조를 정렬하는 데 유용할 수 있습니다.

내장 함수와 함께 Python Lambda를 사용하는 방법

1. map()과 함께 람다 사용하기

map() 함수는 다음과 같이 iterable과 함수를 가져와 iterable의 각 항목에 함수를 적용합니다.

nums 목록을 만들고 map() 함수를 사용하여 nums 목록에 있는 각 숫자의 제곱을 포함하는 새 목록을 만듭니다. 제곱 연산을 정의하기 위해 람다 함수를 사용하는 것에 주목하십시오.

>>> nums = [4,5,6,9]
>>> list(map(lambda num:num*num,nums))
[16, 25, 36, 81]

map() 함수는 지도 객체를 반환하므로 우리는 그것을 리스트로 캐스팅해야 합니다.

▶️ Python의 map() 함수에 대한 이 튜토리얼을 확인하세요.

2. filter()와 함께 Lambda 사용

숫자 목록인 숫자를 정의해 보겠습니다.

>>> nums = [4,5,6,9]

이 목록을 필터링하고 홀수만 유지하려고 한다고 가정합니다.

Python의 내장 filter() 함수를 사용할 수 있습니다.

filter() 함수는 조건과 iterable을 받습니다: filter(condition, iterable). 결과에는 조건을 충족하는 원래 iterable의 요소만 포함됩니다. 반환된 객체를 list와 같은 Python iterable로 캐스팅할 수 있습니다.

모든 짝수를 필터링하기 위해 홀수만 유지합니다. 따라서 람다 표현식은 람다 num: num%2!=0이어야 합니다. 수량 num%2는 num을 2로 나눈 나머지입니다.

  • num%2!=0은 num이 홀수일 때마다 True이고,
  • num%2!=0은 num이 짝수일 때마다 False입니다.
>>> nums = [4,5,6,9]
>>> list(filter(lambda num:num%2!=0,nums))
[5, 9]

3. reduce()와 함께 Lambda 사용

reduce() 함수는 iterable과 함수를 받습니다. iterable의 항목에 반복적으로 함수를 적용하여 iterable을 줄입니다.

reduce() 함수를 사용하려면 Python의 내장 functools 모듈에서 가져와야 합니다.

>>> from functools import reduce

reduce() 함수를 사용하여 nums 목록에 있는 모든 숫자의 합을 계산해 보겠습니다. 우리는 람다 식을 정의합니다: lambda num1,num2:num1+num2, 감소 합 함수로.

감소 연산은 다음과 같이 발생합니다. f(f(f(4,5),6),9) = f(f(9,6),9) = f(15,9) = 24입니다. 여기서 f는 람다 함수로 정의된 목록의 두 항목에 대한 합산 연산입니다.

>>> from functools import reduce
>>> nums = [4,5,6,9]
>>> reduce(lambda num1,num2:num1+num2,nums)
24

정렬 사용자 지정을 위한 Python Lambda 함수

map(), filter() 및 reduce()와 같은 내장 Python 함수와 함께 람다 함수를 사용하는 것 외에도 정렬에 사용되는 내장 함수 및 메서드를 사용자 정의하는 데 사용할 수도 있습니다.

1. 파이썬 목록 정렬하기

Python 목록으로 작업할 때 특정 정렬 기준에 따라 목록을 정렬해야 하는 경우가 많습니다. Python 목록을 제자리에 정렬하려면 내장된 sort() 메서드를 사용할 수 있습니다. 목록의 정렬된 복사본이 필요한 경우 sorted() 함수를 사용할 수 있습니다.

Python의 sorted() 함수를 사용하는 구문은 sorted(iterable, key=…,reverse= True | False)입니다.

– 키 매개변수는 정렬을 사용자 정의하는 데 사용됩니다.
– 반대 매개변수는 True 또는 False로 설정할 수 있습니다. 기본값은 False입니다.

숫자 및 문자열 목록을 정렬할 때 기본 정렬은 각각 오름차순 및 알파벳순입니다. 그러나 때때로 정렬을 위해 몇 가지 사용자 정의 기준을 정의해야 할 수도 있습니다.

다음 목록 과일을 고려하십시오. 목록의 정렬된 복사본을 얻으려고 한다고 가정합니다. 문자열에서 ‘p’가 나오는 횟수에 따라 내림차순으로 문자열을 정렬해야 합니다.

>>> fruits = ['apple','pineapple','grapes','mango']

이제 선택적 키 매개변수를 사용할 차례입니다. 문자열은 파이썬에서 반복 가능하며 그 안에 있는 문자의 발생 횟수를 얻으려면 내장 .count() 메서드를 사용할 수 있습니다. 따라서 정렬이 문자열에서 ‘p’가 발생하는 횟수를 기반으로 하도록 키를 lambda x:x.count(‘p’)로 설정합니다.

>>> fruits = ['apple','pineapple','grapes','mango']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['pineapple', 'apple', 'grapes', 'mango']

이 예에서:

  • 정렬 기준은 문자 ‘p’의 발생 횟수로 람다식으로 정의된다.
  • reverse 매개변수를 True로 설정했기 때문에 ‘p’가 발생한 횟수가 감소하는 순서로 정렬됩니다.

과일 목록에서 ‘파인애플’에는 ‘p’가 3번, ‘apple’, ‘grapes’, ‘mango’에는 각각 ‘p’가 2번, 1번, 0번 나온다.

안정 정렬 이해하기

다른 예를 고려하십시오. 동일한 정렬 기준에 대해 과일 목록을 재정의했습니다. 여기서 ‘p’는 문자열 ‘apple’과 ‘grapes’에서 각각 두 번, 한 번 나타납니다. 그리고 ‘mango’와 ‘melon’ 문자열에서는 절대 발생하지 않습니다.

>>> fruits = ['mango','apple','melon','grapes']
>>> sorted(fruits,key=lambda x:x.count('p'),reverse=True)
['apple', 'grapes', 'mango', 'melon']

출력 목록에서 ‘망고’는 둘 다 문자 ‘p’가 없어도 ‘멜론’ 앞에 옵니다. 그런데 왜 이런 걸까요? sorted() 함수는 안정적인 정렬을 수행합니다. 따라서 ‘p’의 개수가 두 문자열에 대해 같을 때 원래 과일 목록의 요소 순서가 유지됩니다.

빠른 연습으로 과일 목록에서 ‘망고’와 ‘멜론’의 위치를 ​​바꾸고 동일한 기준에 따라 목록을 정렬하고 출력을 관찰합니다.

▶️ Python 목록 정렬에 대해 자세히 알아보세요.

2. 파이썬 사전 정렬하기

Python 사전을 정렬할 때도 람다를 사용할 수 있습니다. 항목과 가격이 포함된 다음 사전 price_dict를 고려하십시오.

>>> price_dict = {
... 'Milk':10,
... 'Honey':15,
... 'Bread':7,
... 'Candy':3
... }

사전의 키-값 쌍을 튜플 목록으로 가져오려면 내장 사전 메서드 .items()를 사용할 수 있습니다.

>>> price_dict_items = price_dict.items()
dict_items([('Milk', 10), ('Honey', 15), ('Bread', 7), ('Candy', 3)])

Python에서 모든 iterable(목록, 튜플, 문자열 등)은 제로 인덱싱을 따릅니다. 따라서 첫 번째 항목은 인덱스 0에 있고 두 번째 항목은 인덱스 1에 있는 식입니다.

사전에 있는 각 항목의 가격인 값으로 정렬하고 싶습니다. price_dict_items 목록의 각 튜플에서 인덱스 1의 항목이 가격입니다. 그래서 우리는 키를 람다 x:x로 설정했습니다.[1] 인덱스 1의 항목인 가격을 사용하여 사전을 정렬하기 때문입니다.

>>> dict(sorted(price_dict_items,key=lambda x:x[1]))
{'Candy': 3, 'Bread': 7, 'Milk': 10, 'Honey': 15}

출력에서 사전 항목은 가격의 오름차순으로 정렬되었습니다. 가격이 3단위인 ‘Candy’부터 시작하여 가격이 15단위인 ‘Honey’까지입니다.

▶️ 자세한 내용은 Python 사전을 키와 값으로 정렬하는 자세한 가이드를 확인하세요.

합산

그리고 당신은 그것을 가지고 있습니다! 람다 함수를 정의하고 다른 Python 내장 함수와 함께 효과적으로 사용하는 방법을 배웠습니다. 주요 내용을 요약하면 다음과 같습니다.

  • Python에서 람다는 여러 인수를 받아 값을 반환할 수 있는 익명 함수입니다. 이 반환 값을 생성하기 위해 평가할 표현식은 한 줄의 코드여야 합니다. 작은 함수 정의를 더 간결하게 만드는 데 사용할 수 있습니다.
  • Lambda 함수를 정의하려면 다음 구문을 사용할 수 있습니다. lambda parameter(s): return value.
  • 중요한 사용 사례 중 일부는 map(), filter() 및 reduce() 함수와 함께 사용하고 Python iterable의 정렬을 사용자 정의하기 위한 핵심 매개변수로 사용하는 것입니다.

다음으로 파이썬에서 나눗셈을 수행하는 방법을 배웁니다.