산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

예제가 있는 Python Lambda 함수

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

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

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

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

이 Python 자습서에서는 다음을 배우게 됩니다.

구문 및 예

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

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 키를 눌러 프로그램을 실행합니다. 실수하지 않았다면 출력은 다음과 같아야 합니다.

출력:

프린터 1 일반 호출

프린터 2 일반 호출

프린터 1 LAMBDA 호출

프린터 2 람다 호출

코드 설명

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

다음 섹션에서는 map()과 함께 람다 함수를 사용하는 방법을 배웁니다. 감소(),필터() 파이썬에서.

Python 내장 람다 사용

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

파이썬 람다의 IIFE

IIFE 즉시 호출된 함수 실행을 나타냅니다. 이는 람다 함수가 정의되는 즉시 호출할 수 있음을 의미합니다. 예를 들어 이것을 이해합시다. IDLE을 실행하고 다음을 입력하십시오:

 (lambda x: x + x)(2)

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

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

filter()의 람다

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

선택될 요소는 미리 정의된 제약 조건을 기반으로 합니다. 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. 첫 번째 명령문에서 우리는 일부 숫자를 포함하는 sequence라는 목록을 정의합니다.

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. 매핑된 값을 저장할 filter_result라는 변수를 선언합니다.
  3. 목록의 각 요소에서 실행되고 해당 숫자의 제곱을 반환하는 람다 함수입니다.
  4. 지도 함수에서 반환된 결과를 인쇄합니다.

reduc()의 람다

map()과 같은 reduce 함수는 시퀀스의 모든 요소에 작업을 적용하는 데 사용됩니다. 그러나 작동하는 면에서 지도와 다릅니다. 다음은 출력을 계산하기 위해 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] 바인딩된 식별자가 없는 함수일 뿐입니다. 간단히 말해서 이름이 없는 함수입니다(따라서 익명). 다음은 파이썬에서 람다와 일반 함수의 차이점을 보여주는 표입니다.

람다

일반 기능

구문:

lambda x : x + x

구문:

def (x) :
return x + x 

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

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

Lambda에는 연결된 이름이 없습니다. 그래서 익명 함수라고도 합니다.

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

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

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

차이점에 대한 설명

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

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

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

여기에서 이름을 정의해야 합니다. 반환 하는 함수의 경우 호출할 때의 결과 그것. 람다 함수에는 기본적으로 항상 반환되는 단일 표현식만 있기 때문에 return 문을 포함하지 않습니다. 즉시 호출할 수 있으므로 람다를 할당할 필요도 없습니다(다음 섹션 참조). 다음 예제에서 볼 수 있듯이 람다는 Python의 내장 함수와 함께 사용할 때 특히 강력해집니다.

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

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

요약

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


python

  1. 파이썬 함수 인수
  2. Python 익명/람다 함수
  3. 파이썬 클로저
  4. 예제를 사용한 C++ 연산자 오버로딩
  5. 프로그램 예제가 있는 C++ 함수
  6. Python Print() 문:예제로 인쇄하는 방법
  7. EXAMPLE이 있는 Python String strip() 함수
  8. 예제가 있는 Python 문자열 count()
  9. Python String format() 예제로 설명
  10. 예제가 있는 Python 문자열 find() 메서드