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