Python基础系列之*args和**kwargs的认识

*args和**kwargs这两个参数咱们经常用到,今天在巩固基础的时候,看到了这两个参数,做了一下对比,所以记录一下。

*args

*args这种写法代表的是 元组,就比如我上面为啥说它们是参数,是因为他们经常在函数的参数中出现。
下面咱们在例子中来说明

1
2
3
4
5
6
7
8
9
10
11
def getTupleParameter(x, *args):
print('x is {}'.format(x))
print('args is {}'.format(args))
print('type is {}'.format(type(args)))
for i in args:
print('i is {}'.format(i))

getTupleParameter(1, 2, 3, 4, 5, 6, 7)

print('*'*100)
getTupleParameter(1)

结果

1
2
3
4
5
6
7
8
9
10
11
12
13
x is 1
args is (2, 3, 4, 5, 6, 7)
type is <class 'tuple'>
i is 2
i is 3
i is 4
i is 5
i is 6
i is 7
********************************************************************
x is 1
args is ()
type is <class 'tuple'>

**kwargs

*kwargs这种写法代表的是 字典,下面咱们在例子中来说明

1
2
3
4
5
6
7
8
9
10
11
12
13
def getDictParameter(x, **kwargs):
print('x is {}'.format(x))
print('kwargs is {}'.format(kwargs))
print('type is {}'.format(type(kwargs)))

getDictParameter(1, a=1, b=2, c=3)
getDictParameter(1)
res = dict(
a=1,
b=2,
c=3
)
getDictParameter(1, **res)

结果

1
2
3
4
5
6
7
8
9
x is 1
kwargs is {'b': 2, 'a': 1, 'c': 3}
type is <class 'dict'>
x is 1
kwargs is {}
type is <class 'dict'>
x is 1
kwargs is {'b': 2, 'a': 1, 'c': 3}
type is <class 'dict'>

*args和**kwargs的混合使用

*args和**kwargs在程序中一起使用很常见

1
2
3
4
5
def getTupleAndDict(x, *args, **kwargs):
print('x is {}'.format(x))
print('kwargs is {}'.format(kwargs))
print('args is {}'.format(args))
getTupleAndDict(1, 2, 3, 4, 5, A=1, B=2, C=3, D=4)

结果

1
2
3
x is 1
kwargs is {'D': 4, 'C': 3, 'A': 1, 'B': 2}
args is (2, 3, 4, 5)