이표현식은 def 의 lambda모든 구문 없이 인라인으로 작은 함수를 만드는 방법입니다. 다음은 단일 n매개변수가 있는 람다가 있으며 매개변수 값을 두 배로 반환합니다.
lambda n: n * 2
람다의 코드는 일반적으로 변수나 if-문이 없는 단일 표현식이며 “반환”을 사용하지 않습니다. Lambda는 인라인으로 작성할 짧은 계산이 필요한 경우에 적합합니다. 많은 프로그램에는 이러한 방식으로 매우 간단하게 해결할 수 있는 일부 하위 부분이 있습니다. 더 긴 코드의 경우 def가 더 좋습니다.
map()함수는 목록에 대해 람다 함수를 실행하여 [1, 2, 3, 4, 5]다음과 같이 목록과 같은 결과 컬렉션을 만듭니다.
>>> list(map(lambda n: n * 2, [1, 2, 3, 4, 5]))
[2, 4, 6, 8, 10]
map()으로 작업하려면 람다에 소스 목록의 한 요소를 나타내는 하나의 매개변수가 있어야 합니다. 문자열 목록 n의 경우 숫자 목록 과 같이 매개변수에 적합한 이름을 선택하십시오 . smap()의 결과는 대부분 목록처럼 작동하지만 인쇄되지 않는 “반복 가능한” 지도 객체입니다. 따라서 예제에서는 인쇄를 위해 map() 결과를 list()로 래핑합니다.
>>> nums = [1, 2, 3, 4, 5]
>>>
>>> map(lambda n: 2 * n, nums) # print fails, so list() below
<map object at 0x10ce142e8>
>>>
>>> list(map(lambda n: 2 * n, nums)) # e.g. double each n
[2, 4, 6, 8, 10]
>>>
>>> list(map(lambda n: n * -1, nums))
[-1, -2, -3, -4, -5]
>>>
>>> list(map(lambda n: 2 ** n, nums))
[2, 4, 8, 16, 32]
>>>
>>> strs = ['Summer', 'is', 'coming']
>>> list(map(lambda s: s.upper() + '!', strs))
['SUMMER!', 'IS!', 'COMING!']
Lambda Def Equivalence
Map은 종종 람다와 함께 사용되지만 def에서도 작동합니다. def를 사용하면 여러 줄, 루프, 주석, 테스트 등의 이점이 있습니다. 다음은 람다 대신 def로 작성된 위의 double-n 계산입니다.
def double(n):
return n * 2
>>> nums = [1, 2, 3, 4, 5, 6]
>>> list(map(double, nums)) # use name of function "double"
[2, 4, 6, 8, 10, 12]
함수는 “double”이라는 이름으로 참조되지만 괄호()는 없습니다. 이것은 함수를 참조하지만 호출하지 않는 드문 경우입니다.
Filter
map()이 filter()함수는 함수와 목록을 취하고 함수가 true를 반환하는 요소의 하위 집합 목록을 반환합니다
예를 들어, 문자열 목록이 주어지면 길이가 3보다 큰 문자열 목록을 반환합니다.
>>> strs = ['apple', 'and', 'a', 'donut']
>>>
>>> list(filter(lambda s: len(s) > 3, strs))
['apple', 'donut']
다른 예로, 숫자 목록이 주어지면 홀수만 포함하도록 필터링합니다( n % 2는 2로 나눈 나머지 나머지입니다. 짝수의 경우 0, 홀수인 경우 1).
>>> nums = [5, 3, 6, 1, 7, 2]
>>> list(filter(lambda n: n % 2 == 1, nums))
[5, 3, 1, 7]