2016-07-05 2 views
2

I는 다음과 같습니다 기능이있어 :전달 키워드를 반복적으로

def bootstrap(instrument, parallel_process=True, **kw): 
    prices = instrument.prices(**kw) 

나는 키워드 인수를 통과 할 수 있도록하려면를, 그래서 내부 비트는 무엇을 알고있다. 나는 가격에 통과하기 위해 후자의 부분을 싶습니다

bootstrap(my_instrument, parallel_process=True, key1=True, key2=45) 

:

내가 좋아하는 뭔가 모두를 호출하는거야. 그것은 내 코드에서 여러 레이어를 통과합니다.

내가이 일을 제대로하고 있습니까? 그러면 기본 키워드 args를 설정하는 것이 불가능 해 보입니다.

그래서이 : ccy_index=False**kw에 전달 될 때

def prices(ccy_index=True, **kw): 
    print(ccy_index) 

작동하지 않습니다 - 그것은 여전히 ​​ccy_index=True

이 전략이 엉망이라고 생각하고, 나는 그것이 취성의 걱정. 필자가 원했던 것은 코드의 모든 다른 비트가 관련 비트를 없애거나 함수에서 구성된 무언가를 기본값으로 설정할 수있는 글로벌 옵션 집합이었습니다. 즉, 키워드 인수와 유사하지만 재귀 적으로 정의됩니다.

+0

나는 당신의 "작동하지 않습니다"시나리오를 다음 있다고 생각하지 않습니다를 - 당신은 적절한 SSCCE을 제공 할 수있다? –

답변

1

나는 이것이 당신이 원하는 것을 믿습니다 :이 방법으로

def prices(**kw_in): 
    kw = dict(ccy_index=True) # Defaults 
    kw.update(kw_in) 
    print(kw["ccy_index"]) 

, 당신은 재귀 **kw를 통해 주위에 인수를 전달할 수 있으며 모든 단계에서 기본값을 할당했다.

위의 코드를 사용하여 :

>>> prices() 
True 
>>> prices(ccy_index=True) 
True 
>>> prices(ccy_index=False) 
False 
+1

그건 정말 우아하고, 정말 좋아합니다! 고맙습니다! :) – cjm2671

관련 문제