Python中函数参数的传递,可以分为以下几种形式:

假设有一个函数,定义如下:


def fn(a,b,c):
    print(a)
    print(b)
    print(c)

1. 按参数所在的位置传递

调用方式:


fn(1,2,3)

这种传递方式,参数的值,完全由参数所在的位置决定,本例中,参数a对应参数值1,参数b对应参数值2,参数c对应参数值3

2. 按关键字传递

所谓的按关键字传递,通俗一点讲,就是在调用函数的时候,把参数名称和参数值作为一个整体,一起传递给它。参数名称必须要与对应的函数参数名称保持一致。

调用方式:


fn(b=3,a=2,c=1)

由于在调用函数的时候,我们指定了参数的名称,此时,参数值跟该参数所在的位置就没用关系了,只跟参数名称对应的值有关。本例中,

参数a对应参数值2,参数b对应参数值3,参数c对应参数值1

3. 位置形式的可变参数

函数的定义需要修改一下,改成如下形式:


def fn(a,b,*c):
    print(a)
    print(b)
    print(c)

看到没有,函数的第三个参数c前面多了一个*号,这个*号表示,我可以接收若干个参数,且参数的形式必须按位置传递。

调用方式:


fn(1,2,3,4,5,6,7)

此时,

参数a对应参数值1,参数b对应参数值2,剩下的参数值3,4,5,6,7全部由参数c接收,接收后,变成一个元组,即(3,4,5,6,7)


4. 关键字形式的可变参数

相对于位置形式的可变参数,函数的定义形式上稍有不同,如下:

def fn(a,b,**c):
    print(a)
    print(b)
    print(c)


仔细比较下,函数的第三个参数c由之前的*c变成了**c,即参数前带了两个*,同样,两个*号也表示可以接收若干个参数,但与一个*号不同的是,两个*号要求的参数传递形式必须是按关键字传递。

调用方式:


fn(1,2,c=3,d=4,e=5)


此时, 参数a对应参数值1,参数b对应参数值2,剩下的参数值3,4,5全部由参数c接收,接收后,变成一个字典类型,如:


{'c':3,'d':4,'e':5}