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
<class 'str'>
k2 [0, 1, 2]
<class 'str'>
希望字典内的键值对能够像上面一样被逐一传入,传入参数时需要加**
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之前
网友评论