我们会发现在一些python的程序函数内出现 *args 和 **kwargs。这表示可以将不定数量的参数传递给这个函数。
不定即你不知道将传递多少个参数给这个函数,所以将 *args 和 **kwargs 应用于这种场景。
*args用例:
第一个参数为必须要传入的参数,所以使用了第一个形参,后面三个形参即作为可变参数列表传入了实参,并且它的类型为元组。
def method1(arg, *args):
print("first normal arg:", arg)
print(type(args))
for arg in args:
print("another arg through *argv:", arg)
method1('aa', 'bb', 'cc', 'dd')
第一个参数为必须要传入的参数,所以使用了第一个形参,后面三个形参即作为可变参数列表传入了实参,并且它的类型为元组。
**kwargs用例:
**kwargs是将一个可变的关键字参数的字典传给函数实参,同样参数列表长度可以为0或为其他值。
def method3(**kwargs):
print(type(kwargs))
print(kwargs)
method3(a=10, b=20, c='python', d=[])
从运行结果看到 kwargs 以一个字典的形式呈现出来。果
我们再来看一个 arg 和 *args 还有 **kwargs 结合的例子。
def method2(first, *args, **kwargs):
print('first normal arg:', first)
print(type(kwargs))
for v in args:
print('Optional argument(args):', v)
for k, v in kwargs.items():
print('Optional argument %s (kwargs): %s' % (k,v))
method2(1, 2, 3, 4, key_1=5, key_2=6)
运行结果为:
我们更清晰的理解到在打印时,kwargs将传入的参数以字典形式呈现出来。
函数调用:
def test(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
args = ("one", 2, 3)
test(*args)
kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
test(**kwargs)