Python中的Kwargs 0个位置参数错误

8

我正在尝试理解Python 3中的**kwargs,并遇到了奇怪的错误。根据这篇关于此事的帖子,我尝试创建自己的版本以确认它是否适用于我。

table = {'Person A':'Age A','Person B':'Age B','Person C':'Age C'}

def kw(**kwargs):
    for i,j in kwargs.items():
        print(i,'is ',j)

kw(table)

奇怪的是我一直得到“TypeError: kw() takes 0 positional arguments but 1 was given”的返回。我不知道为什么,也看不出我的代码和提供链接中的示例代码有什么明显的区别。请问有人能帮我确定是什么导致了这个错误吗?
4个回答

13

使用kw(**table)调用kw函数

Python 3文档: 链接


当我尝试这个时,我得到了TypeError: kw() got an unexpected keyword argument 'Bob' - Jwok
更正 - 当我添加了 kw(**table)def kw(**kwargs) 时,它按预期工作。感谢 @richard_ma! - Jwok
@Jwok 如果table是一个列表,你可以在Python3中使用kw(*table)调用kw函数。 - richard_ma

2

这里没有必要将kwargs作为变量关键字参数。通过使用**指定kwargs,您正在定义具有可变数量的关键字参数但没有位置参数的函数,因此会出现您看到的错误。

相反,只需使用以下代码定义kw函数:

def kw(kwargs):

我觉得这个不起作用。Python 认为只传递了一个参数。只需尝试使用 kw(1, 'foo', 'bar) 调用此函数,你就会收到一个错误。 - Olivierwa

0

def kw(**kwargs): for i,j in kwargs.items(): print(i,'是',j)

"""在字典前面加上 **,像这样:"""

kw(**table)


0
写一个单独的回答,因为我没有足够的声望来评论。
原帖中还有另一个错误,这次是在函数定义中。
一旦你用 ** 运算符在参数中“打开”了一个字典,那么这个字典就不再存在于函数内部。所以在函数中:
def kw(**kwargs):
    for i,j in kwargs.items():
        print(i,'is ',j) 

本地变量将是Bob、Franny和Ribbit,分别带有它们的值


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接