一、demo
1. 关于*args, **kwargs的调用示例
def foo(first, *args, **kwargs):
print('first=', first)
print('args=', args)
print('type(args)=', type(args))
print('kwargs=', kwargs)
print('type(kwargs)=', type(kwargs))
print('--------------------')
if __name__ == '__main__':
foo(1,2,3,4)
foo('first', a=1, b=2, c=3)
foo(1,2,3,4, a=1, b='2', c=3)
# foo(a=1, 1)
2. 查看输出结果
first= 1
args= (2, 3, 4)
type(args)= <class 'tuple'>
kwargs= {}
type(kwargs)= <class 'dict'>
--------------------
first= first
args= ()
type(args)= <class 'tuple'>
kwargs= {'a': 1, 'b': 2, 'c': 3}
type(kwargs)= <class 'dict'>
--------------------
first= 1
args= (2, 3, 4)
type(args)= <class 'tuple'>
kwargs= {'a': 1, 'b': '2', 'c': 3}
type(kwargs)= <class 'dict'>
--------------------
二、解释
1.关于*args
- 实际是一个tuple
- 去除函数必填的调用参数外,将其他的参数做为args的值,类型为tuple
- 可以包含任意多个
2.关于**kwargs
- 实际是一个dict
- 必须包含函数的必填字段,将参数按keyword和value形式转化为dict
3.参数顺序
- 最前面是函数的必填字段
- 接下来是*args参数
- 最后是 **kwargs参数
三、参考连接
https://www.cnblogs.com/fengmk2/archive/2008/04/21/1163766.html
http://kodango.com/variable-arguments-in-python