Python 使用*和**解包字典dict和列表或元组参数(*args,**kwargs)

本文主要介绍Python中,使用*对元组或列表进行参数解包,使用**对字典dict参数进行解包,*args可变参数、**kwargs关键字参数和命名关键字参数,以及相关的示例代码。

1、使用*和**传参给固定参数的函数

可以使用***的方式,将列表或字典参数解包后传递给普通函数。但列表或字典中元素个数需要与参数的个数相同,

def argsd(a1, a2, a3 ,a4 ):
    print(a1)
    print(a2)
    print(a3)
    print(a4)

#使用 * 传递参数,也可以是ag=("C", "Java", "Python", "CJavaPy")
ag=["C", "Java", "Python", "CJavaPy"] 
argsd(*ag)

#使用 * 解包字典只会传key作为参数的值
kag={"a1":"C", "a2":"Java", "a3":"Python", "a4":"CJavaPy"}
argsd(*kag)

#使用 ** 解包字典,就是命名参数,key对应参数名,value为参数值
argsd(**kag)

2、*args和**kwargs定义函数参数(可变参数、关键字参数、命名关键字参数)

使用*args定义可变参数的函数,使用**kwargs为函数定义关键字参数,可变参数用*表示,关键字参数用**argskwargs可以随意命名的,不是固定写法,Python中习惯用argskwargs命名。

1)可变参数

可变参数可以指定多个参数(包括0个),在函数内部会自动认为是一个元组或列表,关键字参数可以用来后期扩展函数的功能。如下,

#可变参数
def args1(*args):
  print("args1:")
  print(args) 

ag=["C", "Java", "Python", "CJavaPy"] #ag=("C", "Java", "Python", "CJavaPy")
args1(ag,"Linux")
args1(*ag,"Linux")
args1("Linux")

2)关键字参数

kwargs中的元素也可以是0个或任意多个,参数在函数内被当做一个字典。如下,

#关键字参数(key=value)
def args2(**kwargs):
  print("args2:")
  print(kwargs) 

def args3(*args,**kwargs):
  print("args3:")
  print(args)
  print(kwargs)

ag=["C", "Java", "Python", "CJavaPy"] #ag=("C", "Java", "Python", "CJavaPy")
kag={"a1":"C", "a2":"Java", "a3":"Python", "a4":"CJavaPy"}
args2(**kag)
args2(a1="C", a2="Java", a3="Python", a4="CJavaPy")
#可变参数和关键字参数
args3(ag,**kag)
args3(*ag,**kag) 
args3(**kag)

3)命名关键字参数

关键字参数,对于传入的参数名无法限制。如需对参数名有限制,就要用命名关键字参数。命名关键字参数需要使用*分隔参数,*后面的参数被视为命名关键字参数,命名关键字参数必须使用key=value形式传入,key是定义时确定的不可以改变。如下,

#命名关键字参数
def args4(a1, a2, * , a3):
  print("args4:")
  print(a1)
  print(a2)
  print(a3)

kag={"a1":"C", "a2":"Java", "a3":"Python"}
args4(1,2,a3=3)
args4(**kag)

推荐阅读
cjavapy编程之路首页