天天看点

《python 与数据挖掘 》一 3.2 函数参数

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个或多个关键字参数,这些参数会被放到字典内并传入到函数中。带两个星号前缀的参数必须定义在所有带默认值的参数之后。