2016-08-16 5 views
0

3 개의 키워드 매개 변수를 사용하는 함수가 있습니다. 그것은 x와 y에 대한 기본값을 가지고 있고 map을 사용하여 z의 다른 값에 대해 함수를 호출하고 싶습니다.키워드 인수가있는 파이썬 부분

foo() got multiple values for keyword argument 'x'

def foo(x =1, y = 2, z = 3): 
    print 'x:%d, y:%d, z:%d'%(x, y, z) 


if __name__ == '__main__': 
    f1 = functools.partial(foo, x= 0, y = -6) 
    zz = range(10) 
    res = map(f1, zz) 

이 문제를 해결하기 위해 파이썬 방법이 있나요 : 나는 다음과 같은 오류가 아래의 코드를 실행하면?

+0

오류가 발생하는 코드에 대한 질문을 게시 할 때는 Traceback을 포함 시키십시오. – wwii

+0

예제에서 보여주는 것보다 다른 인수 조합에 대해 partial을 생성합니까? 부분 호출 서명에 * 누락 * 인수 이름을 지정하지 않아도되는 일반적인 솔루션을 찾고 있습니까? – wwii

답변

2

map(f1, zz) 시도처럼 뭔가를하는 것입니다,하지만 인수가 그것을 할 수있는 알 수 없습니다. partialfoox=0으로 다시 정의했지만 map은 위치 지정 인수를 사용하기 때문에 x을 재 할당하려고 시도합니다.

res = map(lambda z: f1(z=z), zz) 

는 또 다른 방법은 함수의 서명에 인수의 순서를 변경하는 것입니다 :

@mic4ael's 대답으로 단순한 지능형리스트를 사용하거나 map 내부 람다를 정의 할 수 있습니다이에 대응하기 위해 :

def foo(z=3, x=1, y=2): 
1

res = map(f1, zz)을 내부적으로 호출하려고하면 실제로는 [f1(i) for i in range(10)처럼 보입니다. 당신이 볼 수 있듯이 f1 함수는 하나의 위치 인수 (이 경우 f1(x=i)) 만 사용하여 호출됩니다. 가능한 해결책은 zz의 모든 요소에 기능 f1를 호출이

res = [f1(z=i) for i in range(10)] 
관련 문제