Python 예제가 포함된 Lambda 함수
⚡ 스마트 요약
Lambda 함수 Python `lambda`는 `def` 대신 `lambda` 키워드를 사용하여 정의되는 작은 익명 함수입니다. 하나의 표현식을 저장하고, 여러 개의 인수를 받을 수 있으며, `map()`, `filter()`, `sorted()`와 같은 내장 함수에 직접 전달되는 경우가 많습니다.

Lambda 함수란 무엇입니까? Python?
A 람다 함수 Python 프로그래밍은 익명 함수이거나 이름이 없는 함수입니다. 한 줄 이하의 작고 제한된 기능입니다. 일반 함수와 마찬가지로 Lambda 함수는 하나의 표현식으로 여러 인수를 가질 수 있습니다.
In Python, 람다 식(또는 람다 형식)은 익명 함수를 구성하는 데 사용됩니다. 그렇게 하려면 다음을 사용합니다. 람다 키워드(사용하는 것처럼 def 일반 기능을 정의하기 위해). 정의한 모든 익명 함수 Python 3가지 필수 부분으로 구성됩니다.
- 람다 키워드입니다.
- 매개변수(또는 바인딩된 변수) 및
- 함수 본체.
람다 함수는 매개변수를 얼마든지 가질 수 있지만, 함수 본문에는 다음 매개변수만 포함될 수 있습니다. 한 표현. 게다가 람다는 한 줄의 코드로 작성되며 즉시 호출할 수도 있습니다. 다음 예제에서 이 모든 것이 실제로 실행되는 것을 볼 수 있습니다.
구문 및 예
람다 함수를 작성하는 공식 구문은 다음과 같습니다.
lambda p1, p2: expression
여기서 p1과 p2는 람다 함수에 전달되는 매개변수입니다. 필요한 만큼 매개변수를 추가할 수 있습니다.
하지만 일반 함수에서처럼 매개변수 주위에 괄호를 사용하지 않는다는 점에 유의하세요. 마지막 부분(표현식)은 유효한 어떤 값이든 될 수 있습니다. Python 함수에 제공하는 매개변수에 작용하는 표현식입니다.
예제 1
이제 람다에 대해 알았으니 예제를 통해 시도해 보겠습니다. 그러니 당신의 IDLE 다음을 입력합니다.
adder = lambda x, y: x + y print (adder (1, 2))
Code 설명
여기서는 람다 함수가 반환한 결과를 저장할 변수를 정의합니다.
1. 익명 함수를 정의하는 데 사용되는 람다 키워드입니다.
2. x와 y는 람다 함수에 전달하는 매개변수입니다.
3. 이것은 우리가 전달한 2개의 매개변수를 추가하는 함수의 본문입니다. 이는 단일 표현식이라는 점에 유의하세요. 람다 함수 본문에 여러 문을 작성할 수 없습니다.
4. 함수를 호출하고 반환된 값을 인쇄합니다.
예제 2
지금까지는 람다의 기본 원리와 구문을 이해하기 위한 간단한 예제였습니다. 이제 람다를 출력해 보고 결과를 확인해 보겠습니다. 다시 한번, 파일을 열어주세요. IDLE 다음을 입력합니다.
#What a lambda returns string='some kind of a useless lambda' print(lambda string : print(string))
이제 파일을 저장하고 F5를 눌러 프로그램을 실행하세요. 이것이 당신이 얻어야 할 결과입니다.
출력:
<function <lambda> at 0x00000185C3BF81E0>
여기서 무슨 일이 일어나고 있는 걸까요? 더 자세히 이해하기 위해 코드를 살펴보겠습니다.
Code 설명 :
1. 여기서 우리는 다음을 정의합니다. 현 람다 함수에 매개변수로 전달할 값입니다.
2. print 문을 호출하고 결과를 출력하는 람다 함수를 선언합니다.
하지만 프로그램이 우리가 전달한 문자열을 출력하지 않는 이유는 무엇일까요? 이는 람다 함수 자체가 함수 객체를 반환하기 때문입니다. 이 예제에서 람다는 함수 객체를 반환하지 않습니다. 라는 print 함수에 의해 출력되지만 단순히 반환 함수 객체와 해당 객체가 저장된 메모리 위치입니다. 이것이 콘솔에 출력되는 내용입니다.
예제 3
그러나 다음과 같은 프로그램을 작성한다면:
#What a lambda returns #2 x="some kind of a useless lambda" (lambda x : print(x))(x)
F5 키를 눌러 실행하면 다음과 같은 출력이 나타납니다.
출력:
some kind of a useless lambda
이제 람다가 호출되고, 전달한 문자열이 콘솔에 출력됩니다. 그런데 저 이상한 구문은 무엇이고, 람다 정의가 왜 대괄호로 둘러싸여 있을까요? 지금부터 알아보겠습니다.
Code 설명 :
1. 다음은 이전 예제에서 정의한 것과 동일한 문자열입니다.
2. 이 부분에서는 람다 함수를 정의하고 문자열을 인수로 전달하여 즉시 호출합니다. 이것을 IIFE(즉시 함수 표현식)라고 하며, 이 튜토리얼의 다음 섹션에서 더 자세히 알아볼 것입니다.
예제 4
람다 함수와 일반 함수가 어떻게 실행되는지 이해하기 위해 마지막 예제를 살펴보겠습니다. 자, 열어보세요. IDLE 새 파일에 다음을 입력합니다.
#A REGULAR FUNCTION def guru( funct, *args ): funct( *args ) def printer_one( arg ): return print (arg) def printer_two( arg ): print(arg) #CALL A REGULAR FUNCTION guru( printer_one, 'printer 1 REGULAR CALL' ) guru( printer_two, 'printer 2 REGULAR CALL \n' ) #CALL A REGULAR FUNCTION THRU A LAMBDA guru(lambda: printer_one('printer 1 LAMBDA CALL')) guru(lambda: printer_two('printer 2 LAMBDA CALL'))
이제 파일을 저장하고 F5 키를 눌러 프로그램을 실행하세요. 오류가 없다면 출력 결과는 다음과 같을 것입니다.
출력:
printer 1 REGULAR CALL printer 2 REGULAR CALL printer 1 LAMBDA CALL printer 2 LAMBDA CALL
Code 설명 :
1. guru라는 함수는 첫 번째 매개변수로 다른 함수를 받고 그 뒤에 오는 모든 인수를 받습니다.
2. printer_one은 전달된 매개변수를 출력하고 반환하는 간단한 함수입니다.
3. printer_two는 printf_one과 유사하지만 return 문이 없습니다.
4. 이 부분에서는 guru 함수를 호출하고 출력 함수와 문자열을 매개변수로 전달합니다.
5. 다음은 람다식을 사용하여 네 번째 단계(즉, guru 함수 호출)를 수행하는 구문입니다.
다음 섹션에서는 람다 함수를 사용하는 방법을 배웁니다. 지도(), 줄이다()예산 및 필터() in Python.
람다 사용하기 Python 내장
람다 함수는 내장된 메서드를 사용하여 작업을 수행하는 우아하고 강력한 방법을 제공합니다. Python. 이는 람다가 즉시 호출되어 이러한 함수에 인수로 전달될 수 있기 때문에 가능합니다.
IIFE의 Python 람다
IIFE 용 스탠드 즉시 함수 실행을 호출했습니다. 이는 람다 함수가 정의되는 즉시 호출 가능하다는 것을 의미합니다. 예제를 통해 이를 이해해 보겠습니다. 람다 함수를 실행해 보세요. IDLE 다음을 입력합니다.
(lambda x: x + x)(2)
출력 및 코드 설명은 다음과 같습니다.
즉시 호출되는 람다 기능을 사용하면 map() 및 Reduce()와 같은 함수 내에서 람다를 사용할 수 있습니다. 이러한 기능을 다시 사용하고 싶지 않을 수도 있으므로 유용합니다.
필터()의 람다
필터 기능은 일련의 요소에서 특정 요소를 선택하는 데 사용됩니다. 시퀀스는 목록, 집합, 튜플 등과 같은 모든 반복자가 될 수 있습니다.
선택될 요소는 미리 정의된 제약 조건에 따라 결정됩니다. 매개변수는 두 개입니다.
- 필터링 제약 조건을 정의하는 함수
- 시퀀스(리스트, 튜플 등과 같은 모든 반복자)
예를 들어,
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = filter (lambda x: x > 4, sequences) print(list(filtered_result))
출력은 다음과 같습니다.
[10, 8, 7, 5, 11]
Code 설명 :
1. 첫 번째 문장에서는 숫자 몇 개를 포함하는 시퀀스라는 리스트를 정의합니다.
2. 여기서는 filter() 함수에 의해 반환된 필터링된 값을 저장할filtered_result라는 변수를 선언합니다.
3. 목록의 각 요소에 대해 실행되고 4보다 크면 true를 반환하는 람다 함수입니다.
4. 필터 함수가 반환한 결과를 인쇄합니다.
map()의 람다
`map` 함수는 시퀀스의 모든 요소에 특정 연산을 적용하는 데 사용됩니다. `filter` 함수와 마찬가지로 두 개의 매개변수를 받습니다.
- 요소에 대해 수행할 연산을 정의하는 함수
- 하나 이상의 시퀀스
예를 들어, 주어진 목록에 있는 숫자의 제곱을 출력하는 프로그램은 다음과 같습니다.
sequences = [10,2,8,7,5,4,3,11,0, 1] filtered_result = map (lambda x: x*x, sequences) print(list(filtered_result))
출력:
[100, 4, 64, 49, 25, 16, 9, 121, 0, 1]
Code 설명 :
1. 여기서 우리는 숫자들을 담고 있는 '시퀀스'라는 리스트를 정의합니다.
2. 매핑된 값을 저장할 filtered_result라는 변수를 선언합니다.
3. 리스트의 각 요소에 대해 실행되어 해당 숫자의 제곱을 반환하는 람다 함수.
4. map 함수가 반환하는 결과를 출력합니다.
감소()의 람다
reduce 함수는 map()과 마찬가지로 시퀀스의 모든 요소에 연산을 적용하는 데 사용됩니다. 그러나 작동 방식이 map과 다릅니다. reduce() 함수가 출력을 계산하기 위해 따르는 단계는 다음과 같습니다.
단계 1) 시퀀스의 처음 2개 요소에 대해 정의된 연산을 수행합니다.
단계 2) 이 결과를 저장하세요.
단계 3) 저장된 결과와 시퀀스의 다음 요소를 사용하여 작업을 수행합니다.
단계 4) 더 이상 요소가 남지 않을 때까지 반복합니다.
또한 두 가지 매개변수를 사용합니다.
- 수행할 작업을 정의하는 함수
- 시퀀스(리스트, 튜플 등과 같은 모든 반복자)
예를 들어, 다음은 목록에 있는 모든 요소의 곱을 반환하는 프로그램입니다.
from functools import reduce sequences = [1,2,3,4,5] product = reduce (lambda x, y: x*y, sequences) print(product)
출력은 다음과 같습니다.
120
Code 설명 :
1. functools 모듈에서 reduce를 임포트합니다.
2. 여기서 우리는 숫자들을 담고 있는 '시퀀스'라는 리스트를 정의합니다.
3. 감소된 값을 저장할 product라는 변수를 선언합니다.
4. 리스트의 각 요소에 대해 실행되는 람다 함수입니다. 이 함수는 이전 결과와 같이 해당 숫자의 곱을 반환합니다.
5. reduce 함수가 반환하는 결과를 출력합니다.
람다 함수를 사용하는 이유는 무엇이며 사용하지 않는 이유는 무엇입니까?
다음 섹션에서 볼 수 있듯이 람다는 인터프리터 수준에서 일반 함수와 동일하게 처리됩니다. 어떤 면에서 람다는 단일 표현식을 반환하는 함수를 작성하기 위한 간결한 구문을 제공한다고 말할 수 있습니다.
하지만 람다식을 언제 사용하는 것이 좋고 언제 피해야 하는지는 알아야 합니다. 이 섹션에서는 람다식을 사용할 때 적용되는 몇 가지 설계 원칙에 대해 알아보겠습니다. Python 개발자들이 람다식을 작성할 때.
람다의 가장 일반적인 사용 사례 중 하나는 함수형 프로그래밍입니다. Python 함수형 프로그래밍으로 알려진 프로그래밍 패러다임(또는 스타일)을 지원합니다.
람다를 사용하면 다른 함수의 매개변수로 함수를 전달할 수 있습니다(예: map, filter 등). 이러한 경우 람다는 일회성 함수를 생성하여 매개변수로 전달하는 효율적인 방법을 제공합니다.
언제 Lambda를 사용하지 말아야 합니까?
프로덕션 환경에서는 복잡한 람다 함수를 작성해서는 안 됩니다. 코드를 유지 관리하는 코더가 코드를 해독하는 것은 매우 어려울 것입니다. 복잡한 한 줄짜리 표현식을 만드는 경우 적절한 함수를 정의하는 것이 훨씬 더 나은 관행이 될 것입니다. 모범 사례로서, 간단한 코드는 항상 복잡한 코드보다 낫다는 것을 기억해야 합니다.
람다와 일반 함수
앞서 언급했듯이 람다는 식별자가 지정되지 않은 함수입니다. 간단히 말해 이름이 없는 함수(따라서 익명 함수)입니다. 다음 표는 람다와 일반 함수의 차이점을 보여줍니다. Python.
| 람다 | 일반 함수 |
|---|---|
구문 :
lambda x : x + x
|
구문 :
def (x) : return x + x |
| 람다 함수는 본문에 하나의 표현식만 가질 수 있습니다. | 일반 함수에는 본문에 여러 표현식과 명령문이 있을 수 있습니다. |
| 람다 함수는 이름이 지정되어 있지 않습니다. 그래서 익명 함수라고도 불립니다. | 일반 함수에는 이름과 서명이 있어야 합니다. |
| 본문이 자동으로 반환되므로 람다에는 return 문이 포함되어 있지 않습니다. | 값을 반환해야 하는 함수에는 반드시 return 문을 포함해야 합니다. |
차이점에 대한 설명
람다와 일반 함수의 주요 차이점은 람다 함수는 단일 표현식만 평가하고 함수 개체를 생성한다는 것입니다. 결과적으로, 이전 예제에서 했던 것처럼 람다 함수의 결과에 이름을 지정하고 이를 프로그램에서 사용할 수 있습니다.
위 예의 일반 함수는 다음과 같습니다.
def adder (x, y): return x + y print (adder (1, 2))
여기서 우리는 name 그 기능을 위해 반품 우리가 할 때의 결과 전화 람다 함수는 기본적으로 항상 반환되는 단일 표현식만 포함하므로 return 문을 포함하지 않습니다. 람다 함수는 즉시 호출할 수 있으므로 값을 할당할 필요도 없습니다(이전 섹션 참조). 앞으로 살펴보겠지만, 람다 함수는 다음과 같은 상황에서 특히 강력해집니다. Python의 내장 기능.
그러나 여전히 람다가 단일 표현식(예: 위와 같은)을 반환하는 함수와 어떻게 다른지 궁금할 것입니다. 통역사 수준에서는 큰 차이가 없습니다. 놀랍게 들릴 수도 있지만, Python 인터프리터에서는 일반 함수로 처리됩니다.
바이트코드 수준에서 두 정의는 동일한 방식으로 처리됩니다. Python 인터프리터입니다. 이제 함수 이름을 지정할 수 없습니다. 람다 예약되어 있기 때문에 Python하지만 다른 함수 이름을 사용해도 동일한 바이트코드가 생성됩니다.
