如何将kwargs传递给另一个kwargs?
def a(**akwargs):
def b(bkwargs=akwargs):
# how to not only use akwargs defaultly,but also define bkwargs by
# myself?
print bkwargs
return b
>>>a(u='test')()
{'u': test}
>>>a(u='test')(u='test2')
{'u': test2}
如果我想实现下面这个功能,我该如何使用上面的代码呢?
3 个回答
1
为什么不这样做呢?
def a(**akwargs):
def b(**bkwargs):
allkwargs = {}
allkwargs.update(akwargs)
allkwargs.update(bkwargs)
print allkwargs
return b
这个方法使用了的值,但你可以通过传递更多的值给来覆盖它。所以:
>>> a(u='test')()
{'u': 'test'}
>>> a(u='test')(u='test2')
{'u': 'test2'}
4
你想要的有点不太清楚,不过我觉得这个方法可能对你有帮助:
def a(**akwargs):
def b(bkwargs=akwargs, **kwargs):
# how to not only use akwargs defaultly,but also define bkwargs by
# myself?
if not bkwargs:
bkwargs = kwargs
else:
# it depends what you want here (merge or replace?), but probably
# something like bkwargs.update(kwargs) or kwargs.update(bkwargs)
return b
2
这个例子使用外部函数的参数作为默认值,并且会更新传给内部函数的参数。
from functools import partial
def outer(**kwargs):
def inner(**kwargs):
return(kwargs)
return partial(inner, **kwargs)
下一个例子是,如果内部函数没有指定参数,就会使用外部函数的参数。
def outer(**outer_kwargs):
def inner(**inner_kwargs):
kwargs = inner_kwargs or outer_kwargs
return kwargs
return inner