繁体   English   中英

如何在Python中将kwargs传递给另一个kwargs?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM