2010-06-23 8 views
1

그래서 다음을 수행하여 다른 함수 주위에 함수를 래핑 할 수 있다는 것을 알고 있습니다.파이썬은 함수 래퍼를 통해 변수 할당을 전달합니다.

def foo(a=4,b=3): 
    return a+b 
def bar(func,args): 
    return func(*args) 

그래서 난 후 반환 값은 내가 궁금 5.

foo에와 foo에 전화를 막대를 사용하는 방법이 될 것이다

bar(foo,[2,3]) 

라고하는 경우 (B = 12) 바는 16을 반환 할 것입니까?

의미가 있습니까? 미리 시간 내 주셔서 대단히 감사합니다! 그리고 많은 질문을하는 것에 대해 유감스럽게 생각합니다.

답변

10

이 경우 **kwargs (keyword arguments) 구문이 필요합니다. *args가 위치 인수의 수는

def foo(a=4, b=3): 
    return a+b 
def bar(func, *args, **kwargs): 
    return func(*args, **kwargs) 

print bar(foo, b=12) # prints 16 

, **kwargs는 전달 된 모든 명명 된 인수입니다

물론, 그들은 단지 *args 및 컨벤션에 의해 **kwargs 있습니다.; 모든 파이썬에 대해서는 *panda**grilled_cheese이라고 부를 수 있습니다.

+0

감사합니다 마크! 그게 완벽 해, 정확히 내가 필요로하는거야! –

4

네, 당신은 또한 목록 (또는 대신) 외에 딕셔너리를 전달할 수 있습니다

def bar(func, args=[], kwargs={}): 
    return func(*args, **kwargs) 

bar(foo, {'b':12})