python中 *args和**kwargs

版权声明:转载请说明地址,谢谢! https://blog.csdn.net/larykaiy/article/details/82903227

*args:表示的就是将实参中按照位置传值,多出来的值都给args,且以元组的方式呈现)

**kwargs:表示的是形参中按照关键字传值把多余的传值,以字典的方式呈现

(一)、*args

def foo(x,*args):
    print(x)
    print(args)
 
foo(1,2,3,4,5)

1
(2, 3, 4, 5)

注意点①:当args与位置参数和默认参数混用的情况下:(注意三者的顺序)

示例一、(三者顺序是:位置参数、默认参数、*args)

def foo(x,y=1,*args):
    print(x)
    print(y)
    print(args)
foo(1,2,3,4,5)

1
2
(3, 4, 5)

示例二、(三者顺序是:位置参数、*args、默认参数)

def foo(x,*args,y=1):
    print(x)
    print(args)
    print(y)

foo(1,2,3,4,5)

(2, 3, 4, 5)
1

注意点②:其中关于*,可以从2个角度来看(需要拆分来看):

1、从形参的角度来看:

def foo(*args):#其实这一操作相当于def foo(a,b,c,d,e):
    print(args)
foo(1,2,3,4,5)

1
(1, 2, 3, 4, 5)

2、从实参的角度来看:

def foo(x,y,z):
    print(x)
    print(y)
    print(z)
     
foo(*(1,2,3))

1
2
3

(二)、**kwargs

def foo(x,**kwargs):
    print(x)
    print(kwargs)
foo(1,y=1,a=2,b=3,c=4)

1
{‘y’: 1, ‘a’: 2, ‘b’: 3, ‘c’: 4}

注意点①:关于**kwargs与位置参数、*args、默认参数混着用的问题:(注意顺序)

位置参数、*args、**kwargs三者的顺序必须是 位置参数、*args、**kwargs,不然就会报错:

def foo(x,*args,**kwargs):
    print(x)
    print(args)
    print(kwargs)
foo(1,2,3,4,y=1,a=2,b=3,c=4)

1
(2, 3, 4)
{‘y’: 1, ‘a’: 2, ‘b’: 3, ‘c’: 4}

错误示例:(由于顺序错误)

def foo(x,**kwargs,*args):
    print(x)
    print(args)
    print(kwargs)
foo(1,y=1,a=2,b=3,c=4,2,3,4)

1
SyntaxError: invalid syntax
位置参数、默认参数、**kwargs三者的顺序必须是位置参数、默认参数、**kwargs,不然就会报错:

def foo(x,y=1,**kwargs):
    print(x)
    print(y)
    print(kwargs)
foo(1,a=2,b=3,c=4)

1
1
{‘a’: 2, ‘b’: 3, ‘c’: 4}

注意点②:其中关于**,可以从2个角度来看(需要拆分来看):

1、从形参的角度来看:

def foo(**kwargs):
    print(kwargs)
foo(y=1,a=2,b=3,c=4)

{‘y’: 1, ‘a’: 2, ‘b’: 3, ‘c’: 4}

2、从实参的角度来看:

def foo(a,b,c,d):
    print(a)
    print(b)
    print(c)
    print(d)
foo(**{"a":2,"b":3,"c":4,"d":5})

2
3
4
5

def foo(a,b,c,d=1):
    print(a)
    print(b)
    print(c)
    print(d)
foo(**{"a":2,"b":3,"c":4})

2
3
4
1

猜你喜欢

转载自blog.csdn.net/larykaiy/article/details/82903227