파이썬의 왕, 람다 함수
Lambda 함수 소개
Lambda 함수는 익명(이름 없음) 함수라고도 알려져 있으며, 매개변수의 개수와 매개변수를 사용하여 수행할 조건이나 연산을 콜론으로 구분하여 직접 받아들이고, 최종 결과. 큰 코드 베이스에 코드를 작성하면서 작은 작업을 수행하거나, 함수 내에서 작은 작업을 수행하기 위해 일반적인 프로세스에서는 람다 함수를 사용합니다.
lambda argument_list:expersion
argument_list는 매개변수 목록이며, 그 구조는 Python의 함수 매개변수 목록과 동일합니다.
a,b a=1,b=2 *args **kwargs a,b=1,*args 空 ....
expression은 매개변수에 대한 표현식이며, 표현식에 표시되는 매개변수는 다음과 같습니다. 한 줄에만 있어야합니다.
1 None a+b sum(a) 1 if a >10 else 0 [i for i in range(10)] ...
일반 함수와 Lambda 함수의 차이점
- 이름 없음 Lambda 함수에는 이름이 없지만 일반 작업에는 적합한 이름이 있습니다.
- Lambda 함수에는 반환 값이 없습니다. def 키워드를 사용하여 작성된 일반 함수는 값 또는 시퀀스 데이터 유형을 반환하지만 Lambda 함수에서는 전체 프로세스가 반환됩니다. 아래 코드 조각과 유사한 람다 함수 구문을 사용하여 숫자가 짝수인지 홀수인지 확인한다고 가정해 보겠습니다.
b = lambda x: "Even" if x%2==0 else "Odd" b(9)
- 함수는 한 줄로만 작성하고 생성합니다. 일반 함수에서는 들여쓰기를 사용합니다.
- 코드 재사용에는 사용할 수 없습니다. 또는 다른 파일에서는 가져오지 마세요. 반면 일반 함수는 코드 재사용을 위해 사용되며 외부 파일에서 사용할 수 있습니다.
람다 함수를 사용하는 이유
일반적으로 람다 함수는 사용하지 않고, 고차함수와 함께 사용합니다. 고차 함수는 작업을 완료하기 위해 둘 이상의 함수가 필요한 함수입니다. 또는 함수가 다른 함수를 반환하는 경우 Lambda 함수가 사용될 수 있습니다.
고차함수란 무엇인가요?
예를 통해 고차함수를 이해해보세요. 정수 목록이 있고 세 개의 출력이 반환되어야 한다고 가정합니다.
- 목록에 있는 모든 짝수의 합
- 목록에 있는 모든 홀수의 합
- 3으로 나누어지는 모든 수의 합
먼저 이 문제를 처리하기 위해 일반 함수를 사용한다고 가정합니다. 이 경우 개별 작업을 저장하기 위해 세 가지 다른 변수가 선언되고, 결과 세 변수를 처리하고 반환하는 데 for 루프가 사용됩니다. 이 방법은 정상적으로 작동합니다.
이제 Lambda 함수를 사용하여 이 문제를 해결할 수 있습니다. 그런 다음 세 가지 다른 Lambda 함수를 사용하여 테스트할 숫자가 짝수인지, 홀수인지 또는 3으로 나눌 수 있는지 확인한 다음 결과에 숫자를 추가할 수 있습니다.
def return_sum(func, lst): result = 0 for i in lst: #if val satisfies func if func(i): result = result + i return result lst = [11,14,21,56,78,45,29,28] x = lambda a: a%2 == 0 y = lambda a: a%2 != 0 z = lambda a: a%3 == 0 print(return_sum(x, lst)) print(return_sum(y, lst)) print(return_sum(z, lst))
여기서는 Lambda 함수가 일반 함수의 일부로 전달되는 고차 함수가 생성됩니다. 실제로 이러한 유형의 코드는 인터넷 어디에서나 찾을 수 있습니다. 하지만 많은 사람들이 파이썬을 사용할 때 이 기능을 무시하거나 가끔씩만 사용하지만, 실제로 이러한 기능은 정말 편리하고 코드 라인을 더 많이 절약할 수 있습니다. 다음으로 이러한 고차 함수를 살펴보겠습니다.
Python에 내장된 고차 함수
Map 함수
map()은 제공된 함수에 따라 지정된 시퀀스를 매핑합니다.
Map 함수는 두 개의 매개변수를 받는 함수입니다. 첫 번째 매개변수 함수는 매개변수 시퀀스의 각 요소를 사용하여 함수 함수를 호출하고, 두 번째 매개변수는 반복 가능한 시퀀스 데이터 유형입니다. 각 함수에서 반환된 값을 포함하는 새 목록을 반환합니다.
map(function, iterable, ...)
Map 함수는 반복자 개체에서 일부 작업 유형을 정의합니다. 즉, 한 배열의 각 요소의 제곱을 원하는 결과를 생성하는 다른 배열에 매핑하는 등 정사각형 배열 요소를 원한다고 가정합니다.
arr = [2,4,6,8] arr = list(map(lambda x: x*x, arr)) print(arr)
지도 기능을 다양한 방법으로 사용할 수 있습니다. 이름, 주소 등과 같은 세부 정보가 포함된 사전 목록이 있고 목표는 모든 이름을 포함하는 새 목록을 생성하는 것이라고 가정합니다.
students = [ {"name": "John Doe", "father name": "Robert Doe", "Address": "123 Hall street" }, { "name": "Rahul Garg", "father name": "Kamal Garg", "Address": "3-Upper-Street corner" }, { "name": "Angela Steven", "father name": "Jabob steven", "Address": "Unknown" } ] print(list(map(lambda student: student['name'], students))) >>> ['John Doe', 'Rahul Garg', 'Angela Steven']
위 작업은 일반적으로 데이터베이스에서 데이터를 얻거나 웹 크롤링과 같은 시나리오에서 발생합니다.
필터 기능
필터 기능은 주어진 특정 조건에 따라 데이터를 필터링합니다. 즉, 함수에 필터 조건을 설정하고, 요소를 반복하고, 반환 값이 True인 요소를 유지합니다. 맵 기능은 각 요소에 대해 작동하는 반면 필터 기능은 특정 요구 사항을 충족하는 요소만 출력합니다.
과일 이름 목록이 있고 이름에 "g" 문자가 포함된 이름만 출력하는 작업이 있다고 가정합니다.
fruits = ['mango', 'apple', 'orange', 'cherry', 'grapes'] print(list(filter(lambda fruit: 'g' in fruit, fruits)))
filter(function 또는 None, iterable) --> 필터 객체
함수나 항목이 참인 반복 가능한 항목에 대한 반복자를 반환합니다. 함수가 None이면 true를 반환합니다.
Reduce 함수
이 함수는 Python의 내장 함수가 아니며 functools import Reduce를 통해 가져와야 합니다. Reduce는 요소를 줄이기 위해 주어진 함수를 적용하여 시퀀스 데이터 구조에서 단일 출력 값을 반환합니다.
reduce(function, sequence[, initial]) -> value
왼쪽에서 오른쪽으로 시퀀스 항목에 두 개의 인수 함수를 누적 적용하여 시퀀스를 단일 값으로 줄입니다.
initial이 있으면 항목 앞의 시퀀스에 배치되며 시퀀스가 비어 있을 때 기본값으로 사용됩니다.
假设有一个整数列表,并求得所有元素的总和。且使用reduce函数而不是使用for循环来处理此问题。
from functools import reduce lst = [2,4,6,8,10] print(reduce(lambda x, y: x+y, lst)) >>> 30
还可以使用 reduce 函数而不是for循环从列表中找到最大或最小的元素。
lst = [2,4,6,8] # 找到最大元素 print(reduce(lambda x, y: x if x>y else y, lst)) # 找到最小元素 print(reduce(lambda x, y: x if x<y else y, lst))
高阶函数的替代方法
列表推导式
其实列表推导式只是一个for循环,用于添加新列表中的每一项,以从现有索引或一组元素创建一个新列表。之前使用map、filter和reduce完成的工作也可以使用列表推导式完成。然而,相比于使用Map和filter函数,很多人更喜欢使用列表推导式,也许是因为它更容易应用和记忆。
同样使用列表推导式将数组中每个元素进行平方运算,水果的例子也可以使用列表推导式来解决。
arr = [2,4,6,8] arr = [i**2 for i in arr] print(arr) fruit_result = [fruit for fruit in fruits if 'g' in fruit] print(fruit_result)
字典推导式
与列表推导式一样,使用字典推导式从现有的字典创建一个新字典。还可以从列表创建字典。
假设有一个整数列表,需要创建一个字典,其中键是列表中的每个元素,值是列表中的每个元素的平方。
lst = [2,4,6,8] D1 = {item:item**2 for item in lst} print(D1) >>> {2: 4, 4: 16, 6: 36, 8: 64} # 创建一个只包含奇数元素的字典 arr = [1,2,3,4,5,6,7,8] D2 = {item: item**2 for item in arr if item %2 != 0} print(D2) >>> {1: 1, 3: 9, 5: 25, 7: 49}
一个简单应用
如何快速找到多个字典的公共键
方法一
dl = [d1, d2, d3] # d1, d2, d3为字典,目标找到所有字典的公共键 [k for k in dl[0] if all(map(lambda d: k in d, dl[1:]))]
例
dl = [{1:'life', 2: 'is'}, {1:'short', 3: 'i'}, {1: 'use', 4: 'python'}] [k for k in dl[0] if all(map(lambda d: k in d, dl[1:]))] # 1
解析
# 列表表达式遍历dl中第一个字典中的键 [k for k in dl[0]] # [1, 2] # lambda 匿名函数判断字典中的键,即k值是否在其余字典中 list(map(lambda d: 1 in d, dl[1:])) # [True, True] list(map(lambda d: 2 in d, dl[1:])) #[False, False] # 列表表达式条件为上述结果([True, True])全为True,则输出对应的k值 #1
方法二
# 利用集合(set)的交集操作 from functools import reduce # reduce(lambda a, b: a*b, range(1,11)) # 10! reduce(lambda a, b: a & b, map(dict.keys, dl))
写在最后
目前已经学习了Lambda函数是什么,以及Lambda函数的一些使用方法。随后又一起学习了Python中的高阶函数,以及如何在高阶函数中使用lambda函数。
除此之外,还学习了高阶函数的替代方法:在列表推导式和字典推导式中执行之前操作。虽然这些方法看似简单,或者说你之前已经见到过这类方法,但你很可能很少使用它们。你可以尝试在其他更加复杂的函数中使用它们,以便使代码更加简洁。
위 내용은 파이썬의 왕, 람다 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP는 주로 절차 적 프로그래밍이지만 객체 지향 프로그래밍 (OOP)도 지원합니다. Python은 OOP, 기능 및 절차 프로그래밍을 포함한 다양한 패러다임을 지원합니다. PHP는 웹 개발에 적합하며 Python은 데이터 분석 및 기계 학습과 같은 다양한 응용 프로그램에 적합합니다.

PHP는 웹 개발 및 빠른 프로토 타이핑에 적합하며 Python은 데이터 과학 및 기계 학습에 적합합니다. 1.PHP는 간단한 구문과 함께 동적 웹 개발에 사용되며 빠른 개발에 적합합니다. 2. Python은 간결한 구문을 가지고 있으며 여러 분야에 적합하며 강력한 라이브러리 생태계가 있습니다.

VS 코드는 Windows 8에서 실행될 수 있지만 경험은 크지 않을 수 있습니다. 먼저 시스템이 최신 패치로 업데이트되었는지 확인한 다음 시스템 아키텍처와 일치하는 VS 코드 설치 패키지를 다운로드하여 프롬프트대로 설치하십시오. 설치 후 일부 확장은 Windows 8과 호환되지 않을 수 있으며 대체 확장을 찾거나 가상 시스템에서 새로운 Windows 시스템을 사용해야합니다. 필요한 연장을 설치하여 제대로 작동하는지 확인하십시오. Windows 8에서는 VS 코드가 가능하지만 더 나은 개발 경험과 보안을 위해 새로운 Windows 시스템으로 업그레이드하는 것이 좋습니다.

VS 코드 확장은 악의적 인 코드 숨기기, 취약성 악용 및 합법적 인 확장으로 자위하는 등 악성 위험을 초래합니다. 악의적 인 확장을 식별하는 방법에는 게시자 확인, 주석 읽기, 코드 확인 및주의해서 설치가 포함됩니다. 보안 조치에는 보안 인식, 좋은 습관, 정기적 인 업데이트 및 바이러스 백신 소프트웨어도 포함됩니다.

vs 코드에서는 다음 단계를 통해 터미널에서 프로그램을 실행할 수 있습니다. 코드를 준비하고 통합 터미널을 열어 코드 디렉토리가 터미널 작업 디렉토리와 일치하는지 확인하십시오. 프로그래밍 언어 (예 : Python의 Python Your_file_name.py)에 따라 실행 명령을 선택하여 성공적으로 실행되는지 여부를 확인하고 오류를 해결하십시오. 디버거를 사용하여 디버깅 효율을 향상시킵니다.

VS 코드는 파이썬을 작성하는 데 사용될 수 있으며 파이썬 애플리케이션을 개발하기에 이상적인 도구가되는 많은 기능을 제공합니다. 사용자는 다음을 수행 할 수 있습니다. Python 확장 기능을 설치하여 코드 완료, 구문 강조 및 디버깅과 같은 기능을 얻습니다. 디버거를 사용하여 코드를 단계별로 추적하고 오류를 찾아 수정하십시오. 버전 제어를 위해 git을 통합합니다. 코드 서식 도구를 사용하여 코드 일관성을 유지하십시오. 라인 도구를 사용하여 잠재적 인 문제를 미리 발견하십시오.

VS 코드는 Mac에서 사용할 수 있습니다. 강력한 확장, GIT 통합, 터미널 및 디버거가 있으며 풍부한 설정 옵션도 제공합니다. 그러나 특히 대규모 프로젝트 또는 고도로 전문적인 개발의 경우 VS 코드는 성능 또는 기능 제한을 가질 수 있습니다.

Python은 부드러운 학습 곡선과 간결한 구문으로 초보자에게 더 적합합니다. JavaScript는 가파른 학습 곡선과 유연한 구문으로 프론트 엔드 개발에 적합합니다. 1. Python Syntax는 직관적이며 데이터 과학 및 백엔드 개발에 적합합니다. 2. JavaScript는 유연하며 프론트 엔드 및 서버 측 프로그래밍에서 널리 사용됩니다.
