动态参数*args、**kwargs

Python的动态参数有两种,分别是*args和**kwargs,动态参数,必须放在所有的位置参数和默认参数后面!
一个星号表示接收任意个参数。调用时,会将实际参数打包成一个元组传入形式参数。如果参数是个列表,会将整个列表当做一个参数传入
一颗*的动态参数,可接收列表、字符串、数组

def func(*args):
    for arg in args:
        print(arg)

func('a', 'b', 'c')

li = [1, 2, 3]
func(li)
#输出结果为
a
b
c
[1, 2, 3]

在传入可迭代对象列表、字符串、数组等,需要逐个元素传入,此时在传参时加*

def func(*args):
    for arg in args:
        print(arg)

li = [1, 2, 3]
func(*li)

两个星表示接受键值对的动态参数,数量任意。调用的时候会将实际参数打包成字典

def func(**kwargs):
    for kwg in kwargs:
        print(kwg, kwargs[kwg])
        print(type(kwg))

func(k1='v1', k2=[0, 1, 2])
#输出结果
k1 v1

k2 [0, 1, 2]

希望字典内的键值对能够像上面一样被逐一传入,传入参数时需要加**

def func(**kwargs):
    for kwg in kwargs:
        print(kwg, kwargs[kwg])

dic = {
    'k1': 'v1',
    'k2': 'v2'
}

func(**dic)
#输出结果为
k1 v1
k2 v2

args和*kwargs组合起来使用,理论上能接受任何形式和任意数量的参数,在很多代码中我们都能见到这种定义方式。需要注意的是,*args必须出现在**kwargs之前

你可能感兴趣的:(动态参数*args、**kwargs)