双星号操作符在这里是如何工作的?

2024-06-28 19:17:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我知道***操作符通常是如何工作的。在下面的代码中[摘自django的源代码]

def curry(_curried_func, *args, **kwargs):
    def _curried(*moreargs, **morekwargs):
        return _curried_func(*(args + moreargs), **dict(kwargs, **morekwargs))
return _curried

我了解了args + moreargs部分是如何工作的—最初传递给函数curry的[non-keyword]参数和传递给curry返回的curried函数的参数是如何组合的。我不明白的是**dict(kwargs, **morekwargs)是如何工作的。有人能解释一下吗?你知道吗


Tags: django函数代码参数return源代码defargs
2条回答

dict(kwargs, **morekwargs)是一个技巧(Guidodislikes),用于将2个字典组合成1个。你知道吗

>>> d = {'foo':'bar'}
>>> kwargs = {'bar':'baz'}
>>> dict(d,**kwargs)
{'foo': 'bar', 'bar': 'baz'}

因此,curried函数获取传递给curry的所有Kwarg,并将它们添加到传递给_curried函数的其他Kwarg中,以创建一个超级字典。超级字典被解包并发送到_curried_func。你知道吗

它有效地构建了两个dict的联合,kwargsmorekwargs。示例:

>>> kwargs = {"ham": 1, "spam": 2}
>>> morekwargs = {"spam": 3, "eggs": 2}
>>> dict(kwargs, **morekwargs)
{'eggs': 2, 'ham': 1, 'spam': 3}

这是因为dict构造函数接受关键字参数,所以它与

>>> dict(kwargs, spam=3, eggs=2)
{'eggs': 2, 'ham': 1, 'spam': 3}

最后,生成的dict通过**作为关键字参数提供给_curried_func。你知道吗

相关问题 更多 >