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)