关于Python可变参数的理解

来源:互联网 发布:怎样联系网络推手 编辑:程序博客网 时间:2024/05/22 01:49

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}

0 0
原创粉丝点击