Python正课32 —— 函数参数的补充

本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12525632.html

一:命名关键字参数

在定义函数时,*后定义的参数,如下所示,称之为命名关键字参数

特点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
posted @ 2020-03-19 17:17  轻描丨淡写  阅读(309)  评论(0编辑  收藏  举报