首先我们来了解一下python的函数传参方式。
①位置传参:即我们常用的实参与形参按顺序一对一传参。
②关键字传参:按照key=value的形式传入值的方式被称为关键字传参,可以打破顺序为形参进行传值。注意:若使用关键字传参需注意必须跟在位置传参的后面。
例:
def func(school,class,name):
print(school,class,name)
func(school='hnu',class='shiyanban',name='luo')
*args
*是一种语法,args是一种约定俗称。如果定义一个函数时不知道使用者要用位置传参的方式传入多少个实参,可使用*args来进行接收所有多余的被传入的实参,这些多余的被传入实参会被打包成元组类型。(在实参中也可以使用*[1,2,3]来传参。)
例:
def func(school,aclass,name,*args):
print(school,aclass,name)
print(args) #这里输出(1, 2, 3)
func('hnu','shiyanban','luo',1,2,3)
**kwargs
也是一种语法。kwargs则是后面形参名的约定俗称。如果定义一个函数时不知道使用者要用关键字传参的方式传入多少个实参,可使用kwargs来进行接收所有多余的被传入的实参,这些多余的被传入实参会被打包成字典类型。(在实参中也可以使用**{x:1,y:2,z"3}来传参。)
例:
def func(school,aclass,name, **kwargs):
print(school,aclass,name)
print(kwargs) #这里输出{'x': 1, 'y': 2, 'z': 3}
func('hnu','shiyanban','luo',x=1,y=2,z=3)
*args与 **kwargs组合
def register(name, age, *args, gender="male", hobby, **kwargs):
print(f"{name}") # Yunya
print(f"{age}") # 18
print(f"{gender}") # male
print(f"{args}") # (‘a‘, ‘b‘, ‘c‘)
print(f"{hobby}") # (‘篮球‘, ‘足球‘, ‘兵乓球‘)
print(f"{kwargs}") # {‘other‘: ‘暂无‘}
register("Yunya", 18, "a", "b", "c", hobby=("篮球", "足球", "兵乓球"), other="暂无")