gpt4 book ai didi

python - 在函数调用期间将参数添加到 kwargs 中?

转载 作者:IT老高 更新时间:2023-10-28 21:18:03 38 4
gpt4 key购买 nike

有没有办法在函数调用期间将键值对添加到 kwargs 中?

def f(**kwargs):
print(kwargs)

# ...

pre_defined_kwargs = {'a': 1, 'b': 2}

f(**pre_defined_kwargs, c=3)

或者甚至改变现有的论点?

f(**pre_defined_kwargs, b=3)  # replaces the earlier b=2

这两个示例不起作用,因为它们会引发错误

>>> f(**pre_defined_kwargs, c=3)
SyntaxError: invalid syntax

指向参数之间的逗号

最佳答案

对于<3.5的Python版本,你需要放置**kwargs变量关键字参数last:

f(c=3, **pre_defined_kwargs)

Calls expression syntax ;在所有形式的语法中,"**"表达式 规则放在最后。换句话说,在 **expression 语法之后使用任何内容都是语法错误。

如果你想用新值更新字典,你可以使用 dict() callable ;它可以创建您现有字典 更新键的副本,前提是这些键也是有效的 Python 标识符(以字母或下划线开头,并且只包含字母、数字和下划线):

f(c=3, **dict(pre_defined_kwargs, b=42))

这里 b=42'b' 键设置一个 new 值。当然,同样的语法也可以用于添加键。

您不能在 **expression 映射和显式中使用相同的键;这将引发 TypeError。同样,从已经链接的文档中:

If the syntax **expression appears in the function call, expression must evaluate to a mapping, the contents of which are treated as additional keyword arguments. In the case of a keyword appearing in both expression and as an explicit keyword argument, a TypeError exception is raised.

演示:

>>> def f(**kwargs):
... print(kwargs)
...
>>> pre_defined_kwargs = {'a': 1, 'b': 2}
>>> f(c=3, **pre_defined_kwargs)
{'a': 1, 'c': 3, 'b': 2}
>>> dict(pre_defined_kwargs, b=42)
{'a': 1, 'b': 42}
>>> f(c=3, **dict(pre_defined_kwargs, b=42))
{'a': 1, 'c': 3, 'b': 42}

自 Python 3.5 起,此限制已取消(感谢 PEP-448 -- Additional Unpacking Generalizations;您现在可以自由混合参数类型的顺序并在调用中使用多个 **mapping 引用(使用不同的映射)。关键字在应用的所有参数中仍然必须是唯一的;您仍然不能“覆盖”出现多次的参数。

关于python - 在函数调用期间将参数添加到 kwargs 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27892356/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com