Python React 对组件属性的解构是什么?

What is the Python equivalent of React's destructuring of properties in components?

我有一个包含很多属性的字典/对象。我想将其属性作为命名参数传递给 Python.

中的函数

在 React 中,我可以使用 属性 解构:

<Component {...props} attr={10} />

如果 props 包含属性 attr,它将被 10 覆盖。

然而,在 Python 中,这不起作用:

props = {"a": 0, "b": 1, "attr": 3}

def foo(a=None, b=None, attr=None):
    ...

foo(**props, attr=10) # this fails

错误消息是 关键字参数 'attr' 有多个值。当然,一个解决方案是事先删除该项目。然而,这似乎相当笨拙,我很好奇是否有更好的方法来做到这一点。

如果您使用的是 Python 3.9+:

props = {"a": 0, "b": 1, "attr": 3}

foo(**(props | dict(attr=10))
foo(**(props | {'attr': 10}))

考虑到您使用的是 Python 3.5+,您可以使用以下任一替代方案:

props = {"a": 0, "b": 1, "attr": 3}

foo(**{**props, 'attr': 10})
foo(**{**props, **dict(attr=10)})
foo(**{**props, **{'attr': 10}})

如果您使用的是 Python 的早期版本:

from collections import ChainMap

foo(**ChainMap({'attr': 10}, props))

请记住,为了将参数传递给函数,您需要遵循以下顺序:

  • 位置参数
  • 关键字参数
  • *args
  • **kwargs