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
为函数定义关键字参数,可变参数用*
表示,关键字参数用**
,args
和kwargs
可以随意命名的,不是固定写法,Python中习惯用args
和kwargs
命名。
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)