我尝试使用**kwarg
格式实现具有2个参数和附加第3个任意关键字参数的函数,如下所示:
def build_profile(first_name, last_name, **additional_info):
""" Building a user profile """
profile = {}
profile['First name'] = first_name
profile['Last name'] = last_name
for key, value in additional_info.items():
profile[key.title()] = value.title()
return profile
build_profile("x", 'y', 'x', 'y', 'x', 'y')
然而,这会产生错误:
TypeError: build_profile() takes 2 positional arguments but 6 were given
我设法使用以下代码单独重现此错误:
def x(**y):
print(y)
输出:
x(1,2,3,4,5)
这会产生相同的响应:
TypeError: x() takes 0 positional arguments but 1 was given
这导致我得出结论:
答案 0 :(得分:2)
函数签名中的**kwargs
语法用于接受任意数量的关键字参数,即像f(name=value)
一样传入的参数。
def f(**kwargs):
# kwargs is a dict here
用于接受任意数量的位置参数的语法类似于*args
:
def f(*args):
# args is a tuple here
它是*
和**
的语法,这个名称的选择只是一个约定 - 如果你愿意,你可以使用其他名称。您也可以指定两者。
def f(*splat, **splattysplat):
...
答案 1 :(得分:1)
以下是您需要简约,易懂的方法的示例。
>>> def x(*args):
... for arg in args:
... print(arg)
>>> x(1, 2, 3)
1
2
3
>>> def x(**kwargs):
... for k, v in kwargs.items():
... print(k, v)
>>> x(name='john', surname='wick')
name john
surname wick