python中的函数参数主要有3种形式,分别是:
1)位置或关键字参数。
2)任意数量的位置参数。
3)任意数量的关键字参数。
我们在阅读函数时,需要注意函数的参数列表,没有带默认值的参数需要我们往函数传递值,而带默认值的参数可以不传递值。
1.位置或关键字参数
这种参数是python默认的参数类型,函数的参数定义为该类参数后,可以通过位置参数,或者关键字参数的形式传递参数,例如:
可以使用位置参数
fun2(1,2,3) # 输出1,2,3
可以使用关键字参数,关键字参数间的顺序没有关系
fun2(a=1,c=3,b=2) # 输出1,2,3
也可以混合使用位置参数和关键字参数,但位置参数必须在关键字参数的前面
fun2(1,c=3,b=2) # 输出1,2,3
func(a=1,2,3) # 报错
函数参数列表中可以定义默认参数,但python不允许带默认值的参数定义在没有默认值的参数之前,因为这样写是有歧义的。假设允许定义:
def fun3(a=1,b):
那么我调用fun3(2),虽然程序员希望a=1,b=2,但python的位置参数是按顺序赋值的,程序会先把2赋值给a,从而没有参数赋值给b了,所以程序会报错。如果
改成:
def fun3(a,b=2):
调用fun3(1)时,按照顺序,先将1赋值给a,虽然后面没有参数传入,但b已经有默认值,因此这样写程序没有歧义,输出1,2。
2.任意数量的位置参数
任意数量的位置参数在定义的时候是需要一个星号前缀来表示的,在传递参数的时候,可以在原有参数的后面添加0个或多个参数,这些参数将会被放在元组内并传入函数。任意数量的位置参数(一个星号前缀)必须定义在位置或关键字参数(无须星号)之后,且在任意数量的关键字参数(两个星号前缀)之前。如:
3.任意数量的关键字参数
任意数量的关键字参数在定义的时候,参数名称前面需要有两个星号(**)作为前缀,这样定义出来的参数,在传递参数的时候,可以在原有的参数后面添加任意0个或多个关键字参数,这些参数会被放到字典内并传入到函数中。带两个星号前缀的参数必须定义在所有带默认值的参数之后。