Python 예제가 포함된 Lambda 함수

Lambda 함수란 무엇입니까? Python?

A 람다 함수 Python 프로그래밍은 익명 함수이거나 이름이 없는 함수입니다. 한 줄 이하의 작고 제한된 기능입니다. 일반 함수와 마찬가지로 Lambda 함수는 하나의 표현식으로 여러 인수를 가질 수 있습니다.

In Python, 람다 식(또는 람다 형식)은 익명 함수를 구성하는 데 사용됩니다. 그렇게 하려면 다음을 사용합니다. 람다 키워드(사용하는 것처럼 def 일반 기능을 정의하기 위해). 정의한 모든 익명 함수 Python 3가지 필수 부분으로 구성됩니다.

  • 람다 키워드입니다.
  • 매개변수(또는 바인딩된 변수) 및
  • 함수 본체.

람다 함수는 매개변수를 얼마든지 가질 수 있지만, 함수 본문에는 다음 매개변수만 포함될 수 있습니다. 표현. 게다가 람다는 한 줄의 코드로 작성되며 즉시 호출할 수도 있습니다. 다음 예제에서 이 모든 것이 실제로 실행되는 것을 볼 수 있습니다.

구문 및 예

람다 함수를 작성하는 공식 구문은 다음과 같습니다.

lambda p1, p2: expression

여기서 p1과 p2는 람다 함수에 전달되는 매개변수입니다. 필요한 만큼 매개변수를 추가할 수 있습니다.

하지만 일반 함수에서처럼 매개변수 주위에 괄호를 사용하지 않는다는 점에 유의하세요. 마지막 부분(표현식)은 함수에 제공한 매개변수에서 작동하는 모든 유효한 파이썬 표현식입니다.

예제 1

이제 람다에 대해 알았으니 예제를 통해 시도해 보겠습니다. 그러니 당신의 IDLE 다음을 입력합니다.

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

출력은 다음과 같습니다.

3

코드 설명

여기서는 람다 함수가 반환한 결과를 저장할 변수를 정의합니다.

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>

여기서 무슨 일이 일어나고 있는 걸까요? 더 자세히 이해하기 위해 코드를 살펴보겠습니다.

코드 설명

  1. 여기에서 우리는 람다에 매개변수로 전달할 것입니다.
  2. 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

이제 람다가 호출되고, 우리가 전달하는 문자열이 콘솔에 인쇄됩니다. 하지만 그 이상한 구문은 무엇이고, 람다 정의가 괄호로 덮여 있는 이유는 무엇일까요? 이제 이해해 보겠습니다.

코드 설명

  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

코드 설명

  1. 첫 번째 매개변수로 다른 함수를 받고 그 뒤에 다른 인수를 받는 guru라는 함수입니다.
  2. Printer_one은 전달된 매개변수를 인쇄하고 반환하는 간단한 함수입니다.
  3. Printer_two는 Printer_one과 유사하지만 return 문이 없습니다.
  4. 이 부분에서는 guru 함수를 호출하고 프린터 함수와 문자열을 매개변수로 전달합니다.
  5. 이것은 람다를 사용하여 네 번째 단계(즉, 전문가 함수 호출)를 달성하기 위한 구문입니다.

다음 섹션에서는 람다 함수를 사용하는 방법을 배웁니다. 지도(), 줄이다(),필터() in Python.

람다 사용하기 Python 내장

람다 함수는 내장된 메서드를 사용하여 작업을 수행하는 우아하고 강력한 방법을 제공합니다. Python. 이는 람다가 즉시 호출되어 이러한 함수에 인수로 전달될 수 있기 때문에 가능합니다.

IIFE의 Python 람다

IIFE 용 스탠드 즉시 함수 실행을 호출했습니다. 이는 람다 함수가 정의되자마자 호출 가능하다는 것을 의미합니다. 예를 들어 이것을 이해해 봅시다. 너의 불을 켜라 IDLE 다음을 입력합니다.

 (lambda x: x + x)(2)

출력 및 코드 설명은 다음과 같습니다.

즉시 호출되는 람다 기능을 사용하면 map() 및 Reduce()와 같은 함수 내에서 람다를 사용할 수 있습니다. 이러한 기능을 다시 사용하고 싶지 않을 수도 있으므로 유용합니다.

필터()의 람다

필터 기능은 일련의 요소에서 특정 요소를 선택하는 데 사용됩니다. 시퀀스는 목록, 집합, 튜플 등과 같은 모든 반복자가 될 수 있습니다.

선택될 요소는 미리 정의된 일부 제약 조건을 기반으로 합니다. 2개의 매개변수가 필요합니다:

  • 필터링 제약 조건을 정의하는 함수
  • 시퀀스(리스트, 튜플 등과 같은 모든 반복자)

예를 들어,

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]

코드 설명 :

1. 첫 번째 문장에서는 숫자 몇 개를 포함하는 시퀀스라는 리스트를 정의합니다.

2. 여기서는 filter() 함수에 의해 반환된 필터링된 값을 저장할filtered_result라는 변수를 선언합니다.

3. 목록의 각 요소에 대해 실행되고 4보다 크면 true를 반환하는 람다 함수입니다.

4. 필터 함수가 반환한 결과를 인쇄합니다.

map()의 람다

map 함수는 시퀀스의 모든 요소에 특정 연산을 적용하는 데 사용됩니다. filter()와 마찬가지로 매개변수 2개를 사용합니다.

  1. 요소에 대해 수행할 작업을 정의하는 함수
  2. 하나 이상의 시퀀스

예를 들어, 주어진 목록에 있는 숫자의 제곱을 출력하는 프로그램은 다음과 같습니다.

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]

[KR1]

코드 설명 :

  1. 여기서는 숫자 몇 개를 포함하는 시퀀스라는 목록을 정의합니다.
  2. 매핑된 값을 저장할filtered_result라는 변수를 선언합니다.
  3. 목록의 각 요소에 대해 실행되고 해당 숫자의 제곱을 반환하는 람다 함수입니다.
  4. map 함수가 반환한 결과를 인쇄합니다.

감소()의 람다

reduce 함수는 map()과 마찬가지로 시퀀스의 모든 요소에 연산을 적용하는 데 사용됩니다. 그러나 작동 방식이 map과 다릅니다. reduce() 함수가 출력을 계산하기 위해 따르는 단계는 다음과 같습니다.

단계 1) 시퀀스의 처음 2개 요소에 대해 정의된 연산을 수행합니다.

단계 2) 이 결과 저장

단계 3) 저장된 결과와 시퀀스의 다음 요소를 사용하여 작업을 수행합니다.

단계 4) 더 이상 요소가 남지 ​​않을 때까지 반복합니다.

또한 두 가지 매개변수를 사용합니다.

  1. 수행할 작업을 정의하는 함수
  2. 시퀀스(리스트, 튜플 등과 같은 모든 반복자)

예를 들어, 다음은 목록에 있는 모든 요소의 곱을 반환하는 프로그램입니다.

from functools import reduce
sequences = [1,2,3,4,5]
product = reduce (lambda x, y: x*y, sequences)
print(product)

출력은 다음과 같습니다.

120

코드 설명 :

  1. functools 모듈에서 축소 가져오기
  2. 여기서는 숫자 몇 개를 포함하는 시퀀스라는 목록을 정의합니다.
  3. 감소된 값을 저장할 product라는 변수를 선언합니다.
  4. 목록의 각 요소에서 실행되는 람다 함수입니다. 이전 결과에 따라 해당 숫자의 곱을 반환합니다.
  5. 축소 함수가 반환한 결과를 인쇄합니다.

람다 함수를 사용하는 이유는 무엇이며 사용하지 않는 이유는 무엇입니까?

다음 섹션에서 볼 수 있듯이 람다는 인터프리터 수준에서 일반 함수와 동일하게 처리됩니다. 어떤 면에서 람다는 단일 표현식을 반환하는 함수를 작성하기 위한 간결한 구문을 제공한다고 말할 수 있습니다.

그러나 람다를 사용하는 것이 좋은 경우와 이를 피하는 것이 좋은 경우를 알아야 합니다. 이 섹션에서는 Python 개발자가 람다를 작성할 때 사용하는 몇 가지 디자인 원칙을 배웁니다.

람다의 가장 일반적인 사용 사례 중 하나는 다음과 같은 함수형 프로그래밍입니다. Python 함수형 프로그래밍으로 알려진 프로그래밍 패러다임(또는 스타일)을 지원합니다.

이를 통해 함수를 다른 함수(예: 맵, 필터 등)에 대한 매개변수로 제공할 수 있습니다. 이러한 경우 람다를 사용하면 일회성 함수를 생성하고 이를 매개변수로 전달하는 우아한 방법이 제공됩니다.

언제 Lambda를 사용하지 말아야 합니까?

프로덕션 환경에서는 복잡한 람다 함수를 작성해서는 안 됩니다. 코드를 유지 관리하는 코더가 코드를 해독하는 것은 매우 어려울 것입니다. 복잡한 한 줄짜리 표현식을 만드는 경우 적절한 함수를 정의하는 것이 훨씬 더 나은 관행이 될 것입니다. 모범 사례로서, 간단한 코드는 항상 복잡한 코드보다 낫다는 것을 기억해야 합니다.

람다와 일반 함수

이전에 언급한 대로 람다는 [vV4][J5] 바인딩된 식별자가 없는 함수일 뿐입니다. 간단히 말해서 이름이 없는(따라서 익명) 함수입니다. 다음은 Python의 람다 함수와 일반 함수의 차이점을 보여주는 표입니다.

람다

일반 함수

구문 :

lambda x : x + x

구문 :

def (x) :
return x + x 

람다 함수는 본문에 하나의 표현식만 가질 수 있습니다.

일반 함수에는 본문에 여러 표현식과 명령문이 있을 수 있습니다.

람다에는 연결된 이름이 없습니다. 이것이 익명 함수라고도 알려진 이유입니다.

일반 함수에는 이름과 서명이 있어야 합니다.

본문이 자동으로 반환되므로 람다에는 return 문이 포함되어 있지 않습니다.

값을 반환해야 하는 함수에는 return 문이 포함되어야 합니다.

차이점에 대한 설명?

람다와 일반 함수의 주요 차이점은 람다 함수는 단일 표현식만 평가하고 함수 개체를 생성한다는 것입니다. 결과적으로, 이전 예제에서 했던 것처럼 람다 함수의 결과에 이름을 지정하고 이를 프로그램에서 사용할 수 있습니다.

위 예의 일반 함수는 다음과 같습니다.

def adder (x, y):
return x + y 
print (adder (1, 2))

여기서 우리는 name 그 기능을 위해 반품 우리가 할 때의 결과 전화 그것. 람다 함수는 반환 문이 없습니다. 왜냐하면 항상 기본적으로 반환되는 단일 표현식만 있기 때문입니다. 람다를 할당할 필요도 없습니다. 즉시 호출할 수 있기 때문입니다(다음 섹션 참조). 다음 예에서 볼 수 있듯이 람다는 특히 다음과 함께 사용할 때 강력해집니다. Python의 내장 기능.

그러나 여전히 람다가 단일 표현식(예: 위와 같은)을 반환하는 함수와 어떻게 다른지 궁금할 것입니다. 통역사 수준에서는 큰 차이가 없습니다. 놀랍게 들릴 수도 있지만, Python 인터프리터에서는 일반 함수로 처리됩니다.

다이어그램에서 볼 수 있듯이 두 정의는 바이트코드로 변환될 때 Python 인터프리터에 의해 동일한 방식으로 처리됩니다. 이제 함수 이름을 지정할 수 없습니다. 람다 예약되어 있기 때문에 Python, 그러나 다른 함수 이름은 동일한 바이트코드[KR6]를 생성합니다.

제품 개요

  • 익명 함수라고도 알려진 람다는 이름(예: 식별자)이 필요하지 않은 작고 제한된 함수입니다.
  • 모든 람다 함수 Python 3가지 필수 부분이 있습니다:
  • 람다 키워드입니다.
  • 매개변수(또는 바인딩된 변수) 및
  • 함수 본체.
  • 람다 작성 구문은 다음과 같습니다. 람다 매개변수: 표현식
  • 람다는 매개변수를 얼마든지 가질 수 있지만 중괄호로 묶지는 않습니다.
  • 람다의 함수 본문에는 기본적으로 반환되는 표현식이 1개만 있을 수 있습니다.
  • 바이트코드 수준에서는 인터프리터가 람다 함수와 일반 함수를 처리하는 방식 사이에 큰 차이가 없습니다.
  • 람다는 다음 구문을 통해 IIFE를 지원합니다. (람다 매개변수: 표현식)(인수)
  • 람다는 일반적으로 다음과 같은 Python 내장 함수와 함께 사용됩니다.
  • 필터: 필터(람다 매개변수: 표현식, 반복 가능 시퀀스)
  • 맵: 맵(람다 매개변수: 표현식, 반복 가능한 시퀀스)
  • 축소: 축소(람다 매개변수1, 매개변수2: 표현식, 반복 가능 시퀀스)
  • 코드 유지관리자가 어렵기 때문에 프로덕션 환경에서는 복잡한 람다 함수를 작성하지 마세요.

[J5]표를 추가했지만 차이점을 이해하려면 설명이 필요합니다.

이 게시물을 요약하면 다음과 같습니다.