2012-08-14 2 views
1

함수가 두 개의 문자열 인수를가집니다. 첫 번째 함수는 작동하지만 itertools 설명서에 따라 두 번째 함수도 사용하지 않아야합니까? 이 기능은 현재 답례로, 임의의 문자열을 인쇄,하지만 두 번째 아무것도Python 2.7 Itertools Starmap

func(*("dog", "cat")) //works 

itertools.starmap(func, [("dog", "cat")]) //fails without error message, nothing gets printed to screen 

가 아마 밤에 너무 늦게 (또는 초)입니다 인쇄됩니다, 여기 눈부신 실수를 놓친 거지?

답변

3

itertools.starmap 이터레이터를 반환합니다. 실제로 그것을 실행 시키려면 그것을 반복해야합니다. list 사용 :

list(itertools.starmap(func, [("fall", "2007")])) 
1

문제는 당신 starmap() 함수 호출의 결과 것은 반복자 (즉 itertools.starmap 개체),하지만 값 자체의 목록을 반환합니다. 당신이 이상 반복하여 결과를 하나씩을해야하지만

귀하의 기능은 잘 작동 : (당신이 가져 오는 게으른 결과가 필요하지 않은 경우)

for result in itertools.starmap(func, [("fall", "2007")]): 
    # print result here or do some other stuff 

가 시작 결과의 목록을 얻으려면 - 목록에 반복기를 적용하십시오.

list(itertools.starmap(func, [("fall", "2007")])) 
+0

starmap은 lazily를 실행하므로 .next() 내부 메소드가 호출 될 때 (전달 된 함수에 전달 된 값을 적용합니다 (.next() 메소드 호출 당 하나씩). list (..)는 이러한 호출을 반복하고 결과 목록을 만듭니다. for-loop는 각 반복마다 암시 적으로 .next() 메서드를 호출합니다. –

0

개인적으로, 나는 단지 starmap을 피합니다. 대신 다음과 같은 자생 함수를 사용합니다.

def one_arg(f) : 
    return lambda x : f(*x) 

to를 func에 적용합니다.