一:命名关键字参数
在定义函数时,*后定义的参数,如下所示,称之为命名关键字参数
特点1:命名关键字实参必须按照key=value的形式为其传值
def func(x,y,*,a,b): # 其中,a和b称之为命名关键字参数
print(x,y)
print(a,b)
func(1,2,b=222,a=111)
func() # TypeError: func() missing 2 required positional arguments: 'x' and 'y'
# 示例
def func(x,y,*,a=11111,b): # 不会出现语法错误,*后的a和b是命名关键字,a=111只是为命名关键字形参设置默认值
print(x,y)
print(a,b)
func(1,2,b=22222)
特点2:组合使用(了解)
形参混用的顺序:位置形参,默认形参,*args,命名关键字形参,**kwargs
def func(x,y=1,*args,z,**kwargs):
print(x)
print(y)
print(args)
print(z)
print(kwargs)
二:实参混用的顺序:
def func(x,y,z,a,b,c):
print(x,y,z,a,b,c)
func(111,y=222,*[333,444],**{'b':555,'c':666})
# 相当于:func(111,y=222,333,444,b=555,c=666)
报错:TypeError: func() got multiple values for argument 'y' 给y赋了多个值
正确顺序应该是:
def func(x,y,z,a,b,c):
print(x,y,z,a,b,c)
func(111,*[222,333],a=444,**{'b':555,'c':666})
# 相当于:func(111,222,333,a=444,b=555,c=666)
# 也可以是:
# func(111,*[222,333],**{'b':555,'c':666},a=444,)
# 相当于:func(111,3333,4444,b=555,c=666,a=444)
输出:
111 222 333 444 555 666