如何解决React 在组件中解构属性的 Python 等价物是什么?
我有一个有很多属性的字典/对象。我想将其属性作为命名参数传递给 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,"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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。