Python TypeError:获取了意外的关键字参数“name”

2024-06-16 10:43:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我是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'

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


Tags: namehelloageargsjohnpricestudentkwargs
3条回答

你在这里做错的是

函数student_info2在代码中只能接受2个位置参数,因此应该像这样调用函数

学生信息2(课程、模块)

如果您希望一次性调用所有4个函数,那么您的函数声明应该如下所示

学生信息2(arg1、arg2、arg3、arg4)或学生信息2(*args)

你不需要*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/

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

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

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

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

注意:

  • *args接受iterables或位置参数和**kwargs 接受关键字或命名参数
  • ^定义函数参数时,{}必须位于**kwargs之前

相关问题 更多 >