【问题标题】:Python TypeError: got an unexpected keyword argument 'name'Python TypeError:得到了一个意外的关键字参数'name'
【发布时间】:2020-10-13 11:10:20
【问题描述】:

我是 python 新手,最近刚刚学习了 *args 和 **kwargs 的基础知识。

当我尝试使用自己的代码进行练习时,出现了一个意想不到的关键字错误,如下所示:

def student_info2(args, kwargs):
    print(args)
    print(kwargs)

courses = ["Maths", "Statistics"]
module = "Data Science"
students = {"name": "John Price", "age": 27}
welcome_words = {"welcome": "hello and welcome"}
student_info2(*courses, *module, **students, **welcome_words)
TypeError                                 Traceback (most recent call last)
<ipython-input-61-8bc2f643a250> in <module>
      7 students = {"name":"John Price","age":27}
      8 welcome_words = {"welcome":"hello and welcome"}
----> 9 student_info2(*courses,*module, **students, **welcome_words)

TypeError: student_info2() got an unexpected keyword argument 'name'

我真的不知道为什么会这样,如果有人可以帮助我解决这个问题,我真的很感激。

【问题讨论】:

    标签: python function typeerror args keyword-argument


    【解决方案1】:
    def student_info2(args,kwargs):
        print(args)
        print(kwargs)
    

    这个函数可以正常工作,但它仅限于两个参数,即argskwargs。此时,argskwargs 只是 2 个变量名称,它们不会按照您的意愿行事,因为您没有将它们与 *args**kwargs 等解包运算符一起使用。

    *args**kwargs 用于为函数提供不同数量的输入参数。 argskwargs 只是一个变量名,可以更改为您需要的任何名称。

    def student_info2(*args, **kwargs):
        print(args)
        print(kwargs)
    

    注意:

    • *args 接受迭代或位置参数,**kwargs 接受关键字或命名参数。
    • 定义函数参数时,*args 必须在 **kwargs 之前。

    【讨论】:

      【解决方案2】:

      你不需要 *s,你应该把它们放在你的函数声明中。此外,如果你给一个函数 4 个参数,你应该收到 4 个。

      def student_info2(arg1, arg2, arg3, arg4):
          print(arg1)
          print(arg2)
          print(arg3)
          print(arg4)
          
      
      courses = ["Maths","Statistics"]
      module = "Data Science"
      students = {"name":"John Price","age":27}
      welcome_words = {"welcome":"hello and welcome"}
      student_info2(courses, module, students, welcome_words)
      

      如果你想接收 X 数量的参数,你应该这样做

      def student_info2(*args):
          print(args)
          
      
      courses = ["Maths","Statistics"]
      module = "Data Science"
      students = {"name":"John Price","age":27}
      welcome_words = {"welcome":"hello and welcome"}
      student_info2(courses, module, students, welcome_words)
      

      args 将是参数列表。 **kwargs 将是字典而不是列表。您也可以混合使用普通参数和 args/kwargs。

      查看此网站以获得更多说明:https://www.geeksforgeeks.org/args-kwargs-python/

      【讨论】:

      • 谢谢,已经整理好了,我也去看看链接。
      【解决方案3】:

      你做错了什么

      你的函数 student_info2 只能通过你的代码接受 2 个位置参数,所以你应该像这样调用函数

      student_info2(课程、模块)

      如果你想一次性调用所有 4 个,那么你的函数声明应该是这样的

      student_info2(arg1, arg2, arg3, arg4) 或 student_info2(*args)

      【讨论】:

        【解决方案4】:

        你有两个参数作为函数的输入,但是你给了四个参数作为函数的输入,但是如果你想使用 args 和 kwargs,你不应该使用这种方式。 看看这些网站,他们可以帮助你理解

        https://realpython.com/python-kwargs-and-args/

        https://www.programiz.com/python-programming/args-and-kwargs

        https://www.geeksforgeeks.org/args-kwargs-python/

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-09-17
          • 2019-01-13
          • 2012-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-10-18
          相关资源
          最近更新 更多