Python中的*args,**kwargs

我们会发现在一些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)

运行结果为:

扫描二维码关注公众号,回复: 14832311 查看本文章

 我们更清晰的理解到在打印时,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)

猜你喜欢

转载自blog.csdn.net/weixin_44516623/article/details/127041911