如何将kwargs传递给另一个kwargs?

1 投票
3 回答
1089 浏览
提问于 2025-04-18 14:25
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

撰写回答