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