[英]How to pass kwargs to another kwargs in python?
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}
尚不清楚您要什么,但我認為這是竅門:
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
默認使用外部函數的kwarg,並更新傳遞給內部函數的kwarg。
from functools import partial
def outer(**kwargs):
def inner(**kwargs):
return(kwargs)
return partial(inner, **kwargs)
如果沒有將kwargs分配給內部函數,那么下一個將使用來自外部函數的kwargs。
def outer(**outer_kwargs):
def inner(**inner_kwargs):
kwargs = inner_kwargs or outer_kwargs
return kwargs
return inner
為什么不執行以下操作?
def a(**akwargs):
def b(**bkwargs):
allkwargs = {}
allkwargs.update(akwargs)
allkwargs.update(bkwargs)
print allkwargs
return b
這將使用值從a
但允許您通過傳遞更多的覆蓋它b
。 所以:
>>> a(u='test')()
{'u': 'test'}
>>> a(u='test')(u='test2')
{'u': 'test2'}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.