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 함수의 차이점
b = lambda x: "Even" if x%2==0 else "Odd" b(9)
일반적으로 람다 함수는 사용하지 않고, 고차함수와 함께 사용합니다. 고차 함수는 작업을 완료하기 위해 둘 이상의 함수가 필요한 함수입니다. 또는 함수가 다른 함수를 반환하는 경우 Lambda 함수가 사용될 수 있습니다.
예를 통해 고차함수를 이해해보세요. 정수 목록이 있고 세 개의 출력이 반환되어야 한다고 가정합니다.
먼저 이 문제를 처리하기 위해 일반 함수를 사용한다고 가정합니다. 이 경우 개별 작업을 저장하기 위해 세 가지 다른 변수가 선언되고, 결과 세 변수를 처리하고 반환하는 데 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 함수가 일반 함수의 일부로 전달되는 고차 함수가 생성됩니다. 실제로 이러한 유형의 코드는 인터넷 어디에서나 찾을 수 있습니다. 하지만 많은 사람들이 파이썬을 사용할 때 이 기능을 무시하거나 가끔씩만 사용하지만, 실제로 이러한 기능은 정말 편리하고 코드 라인을 더 많이 절약할 수 있습니다. 다음으로 이러한 고차 함수를 살펴보겠습니다.
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를 반환합니다.
이 함수는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!