
Python是支持 可变参数 的,实现手段之一就是使用 *args 和 **kwargs 语法。
可变参数 的意思是:预先并不知道, 函数使用者会传递多少个参数给你。
*args 和 **kwargs 是一个 将 不定量的参数 pack 的过程。
*args 和 **kwargs 是一个 将 不定量的参数 unpack 的过程。
在函数里同时使用所有这三种参数(标准参数 与 *args 、**kwargs)时, 使用顺序如下:
some_func(fargs, *args, **kwargs)
其中,*args 必须位于 **kwargs 之前。
def func(requirement, *args, **kwargs):
print 'requirement = ', requirement
print 'args = ', args
print 'kwargs = ', kwargs
print
if __name__ == '__main__':
func(1, 2, 3, 4)
func(0, a=1, b=2, c=3)
func(1, 2, 3, 4, a=1, b=2, c=3)
func('a', 1, None, a=1, b='2', c=3)打印结果:
requirement = 1
args = (2, 3, 4)
kwargs = {}
requirement = 0
args = ()
kwargs = {'a': 1, 'c': 3, 'b': 2}
requirement = 1
args = (2, 3, 4)
kwargs = {'a': 1, 'c': 3, 'b': 2}
requirement = a
args = (1, None)
kwargs = {'a': 1, 'c': 3, 'b': '2'}def func(a, b, c, d):
print 'a: ', a
print 'b: ', b
print 'c: ', c
print 'd: ', d
args = [1, 2, 3, 4]
kwargs = {'a': 1, 'b': 2, 'c': 3, 'd': 4}
print '*args:'
func(*args)
print '\n**kwargs:'
func(**kwargs)打印结果:
*args:
a: 1
b: 2
c: 3
d: 4
**kwargs:
a: 1
b: 2
c: 3
d: 4