递归传递关键字

时间:2016-07-05 08:10:44

标签: python python-3.x recursion

我有一个看起来像这样的功能:

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

我希望能够传递关键字参数,因此内部位知道该怎么做。

我打算用以下内容打电话:

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

我希望后面的部分能够了解价格。它将在我的代码中传递几个层。

我这样做了吗?似乎无法设置默认关键字args。

所以这个:

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

ccy_index=False传递**kw后无法工作 - 它仍然认为ccy_index=True

这个策略很乱,我担心它很脆弱。我想要的是一组全局选项,代码的所有不同位可以提升其相关位,或者默认为函数中配置的内容。换句话说,就像关键字参数一样,但是递归定义。

1 个答案:

答案 0 :(得分: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