概述
一句话概括,*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个dict。二者都是函数额外的参数。
例子
def test(a, b, *args, **kwargs):
print ('args = ', args)
print ('kwargs = ', kwargs)
print ('---------------------------------------')
if __name__ == '__main__':
test(1, 2, 3, 4)
# args = (3, 4)
# kwargs = {}
# ---------------------------------------
## 由于test()函数有两个命名参数,所以剩下的“3,4”就放在了*args。
test(a=1, b=2, c=3)
# args = ()
# kwargs = {'c': 3}
# ---------------------------------------
## a和b都是命名的参数,所以即使赋值的形式是key=value形式,但额外的参数只有“c=3”,就给了**kwargs。
test(1, 2, 3, 4, c=3)
# args = (3, 4)
# kwargs = {'c': 3}
# ---------------------------------------
## “1,2”分别给了a和b,还剩下“3,4”就给了*args,“c=3”给了**kwargs。
test('a', 1, None, c='3')
# args = (None,)
# kwargs = {'c': '3'}
# ---------------------------------------
## “'a'和1”分别给了a和b,剩下的“None”给了*args,“c=30”给了**kwargs。