通过** kwargs获取变量,但引发有关位置参数的错误

时间:2019-05-19 09:23:34

标签: python

尝试将字典传递到函数中以将其打印出来,但是会引发错误:most_courses()接受0个位置参数,但给出了1个

def most_courses(**diction):
    for key, value in diction.items():
        print("{} {}".format(key,value))

most_courses({'Andrew Chalkley': ['jQuery Basics', 'Node.js Basics'],'Kenneth Love': ['Python Basics', 'Python Collections']})

我用过** kwargs,但是为什么python无法解压缩字典呢?

3 个答案:

答案 0 :(得分:2)

将字典作为参数传递时,您可以按照编写的方式进行操作:

most_courses({'Andrew Chalkley':  ... 

在这种情况下,most_cources应该接受“位置”参数。这就是为什么它引发:most_courses() takes 0 positional arguments but 1 was given

您给了它1个位置参数,而most_cources(看起来像是most_courses(**d))没有任何要求。.

您应该这样做:

most_courses(**{'Andrew Chalkley': ['jQuery Basics', 'Node.js Basics'],'Kenneth Love': ['Python Basics', 'Python Collections']})

或更改方法的签名:

def most_courses(diction):
    for key, value in diction.items():
        print("{} {}".format(key,value))

答案 1 :(得分:1)

这里没有理由使用**。您想传递一个字典并将其作为字典处理。只需使用标准参数即可。

def most_courses(diction):

答案 2 :(得分:1)

在函数定义中用**表示的参数需要使用关键字传递:

示例:

def test(**diction):
    print(diction)

不带关键字传递的参数:

test(8)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-9-5092d794a50d> in <module>
      2     print(diction)
      3 
----> 4 test(8)
      5 test(test_arg=9)

TypeError: test() takes 0 positional arguments but 1 was given

使用任意关键字:

test(test_arg=8)

输出:

{'test_arg': 8}

编辑:

有用的链接:

enter image description here

Use of *args and **kwargs