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
我有一个包含很多属性的字典/对象。我想将其属性作为命名参数传递给 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