답변:
하나의 옵션은 목록 이해입니다.
[add(x, 2) for x in [1, 2, 3]]
더 많은 옵션 :
a = [1, 2, 3]
import functools
map(functools.partial(add, y=2), a)
import itertools
map(add, a, itertools.repeat(2, len(a)))
add()사소한 기능인 경우, 특히 비슷 함
map()어느 쪽도 도움이되지 않습니다.
map()동작합니다 좋아 zip_longest()그것처럼 행동하면서, 파이썬 2에서 zip()파이썬 3에서)
문서는 이것이 다음의 주요 용도라고 명시 적으로 제안합니다 itertools.repeat.
반복해서 객체를 반환하는 반복자를 만듭니다. times 인수가 지정되지 않으면 무한정 실행됩니다.
map()호출 된 함수 에 대한 불변 매개 변수 에 대한 인수로 사용됩니다 .zip()튜플 레코드의 고정 부분을 만드는 데에도 사용됩니다 .
그리고 패스에 대한 이유가되지 len([1,2,3])는 AS times인수; map첫 번째 iterable이 소비되는 즉시 중지되므로 무한 iterable은 완벽하게 좋습니다.
>>> from operator import add
>>> from itertools import repeat
>>> list(map(add, [1,2,3], repeat(4)))
[5, 6, 7]
실제로 이것은 repeat문서 의 예제와 동일합니다 .
>>> list(map(pow, range(10), repeat(2)))
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
이것은 파이썬 반복자 용어로 완벽하게 읽을 수있는 멋진 게으른 기능 언어 솔루션을 만듭니다.
def f(x,y,z): \\ return '.'.join([x,y,z])그런 다음 :를 list(map(f, list('abc'), repeat('foo'), list('defgh')))반환합니다 ['a.foo.d', 'b.foo.e', 'c.foo.f'].
repeat(). 왜냐하면 가장 긴 반복자가 해당 버전의 Python에서 소진 map()될 때까지 실행 되므로 모든 누락 된 값이 채워 집니다. 매개 변수를 전달할 "이유가 없다"고 말하는 것은 잘못입니다. None
지도에는 여러 개의 인수가 포함될 수 있습니다. 표준 방법은
map(add, a, b)
귀하의 질문에, 그것은
map(add, a, [2]*len(a))
때로는 클로저 를 사용하여 유사한 상황 (예 : pandas.apply 메소드 사용)을 해결했습니다.
그것들을 사용하기 위해 함수의 래퍼를 동적으로 정의하고 반환하는 함수를 정의하여 효과적으로 매개 변수 중 하나를 상수로 만듭니다.
이 같은:
def add(x, y):
return x + y
def add_constant(y):
def f(x):
return add(x, y)
return f
그런 다음 주어진 값 add_constant(y)에 추가 y하는 데 사용할 수있는 함수를 반환 합니다.
>>> add_constant(2)(3)
5
매개 변수가 한 번에 하나씩 제공되는 모든 상황에서 사용할 수 있습니다.
>>> map(add_constant(2), [1,2,3])
[3, 4, 5]
편집하다
다른 곳에서 클로저 함수를 작성하지 않으려는 경우 람다 함수를 사용하여 즉시이를 작성할 수 있습니다.
>>> map(lambda x: add(x, 2), [1, 2, 3])
[3, 4, 5]
정말로 map 함수를 사용해야 할 필요가 있다면 (여기의 클래스 할당과 같이), 1 개의 인수와 함께 랩퍼 함수를 사용하여 나머지는 본문의 원래 함수에 전달할 수 있습니다. 즉 :
extraArguments = value
def myFunc(arg):
# call the target function
return Func(arg, extraArguments)
map(myFunc, itterable)
더럽고 못생긴 여전히 트릭을 수행
myFunc필요return Func(arg, extraArguments)
Func는 원래 함수의 이름입니다. add예를 들어 OP 타이트의 경우
스타 맵이 필요하다고 생각합니다.
from itertools import starmap
def test(x, y, z):
return x + y + z
list(starmap(test, [(1, 2, 3), (4, 5, 6)]))
map함수에 여러 인수를 전달 합니다.
def q(x,y):
return x*y
print map (q,range(0,10),range(10,20))
여기서 q 는 map ()이 호출 하는 여러 인수가있는 함수입니다 . 두 범위의 길이, 즉
len (range(a,a')) and len (range(b,b')) are equal.
에 :nums = [1, 2, 3]
에 :map(add, nums, [2]*len(nums))
밖:[3, 4, 5]
map(add,[1,2,3],[2]*3)일반적map으로 함수를 첫 번째 인수로 취하고,이 함수가 K 인수를 취 하면 K iterable 을 추적해야합니다 .addTriple(a,b,c) -> map(addTriple,[...],[...],[...])