首页 > 代码库 > python基础11(函数三)

python基础11(函数三)

一、函数参数的类型

  之前我们接触到的那种函数参数定义和传递方式叫做位置参数,即参数是通过位置进行匹配的,从左到右,依次进行匹配,这个对参数的位置和个数都有严格的要求。而在Python中还有一种是通过参数名字来匹配的,这样一来,不需要严格按照参数定义时的位置来传递参数,这种参数叫做关键字参数

>>> def display(a,b):    print a    print b    
>>> display(hello,world) # 位置参数,即参数是通过位置进行匹配helloworld>>> display(hello) # 这样会报错Traceback (most recent call last): File "<pyshell#30>", line 1, in <module> display(hello)TypeError: display() takes exactly 2 arguments (1 given)
>>> display(world,hello)worldhello>>> >>> display(a=hello,b=world) # 关键字参数helloworld>>> display(b=world,a=hello)helloworld # 可以看到通过指定参数名字传递参数的时候,参数位置对结果是没有影响的。

 

 关键字参数最厉害的地方在于它能够给函数参数提供默认值

>>> def display(a=hello,b=wolrd):   # 分别给a和b指定了默认参数        print a+b        
>>> display() hellowolrd>>> display(b=world) # 如果不给a或者b传递参数时,它们就分别采用默认值helloworld>>> display(a=hello)hellowolrd>>> display(world) # 没有指定‘world‘是传递给a还是b,则默认从左向右匹配,即传递给aworldwolrd

 

注意:在重复调用函数时默认形参会继承之前一次调用结束之后该形参的值

>>> def insert(a,L=[]):        L.append(a)        print L        
>>> insert(hello)[hello]>>> insert(world) [hello, world] # 重复调用函数时默认形参会继承之前一次调用结束之后该形参的值

 

 

二、任意个数参数

在无法确定参数的个数,就可以使用收集参数了,使用收集参数只需在参数前面加上‘*‘或者‘**‘。

‘*‘和‘**‘表示能够接受0到任意多个参数,‘*‘表示将没有匹配的值都放在同一个元组中,‘**‘表示将没有匹配的值都放在一个字典中。

>>> def mul(*arg):      # 一个以*开始的参数,代表一个元组    print arg    
>>> mul(1,2,3,Ethon)(1, 2, 3, Ethon)>>> >>> def mul2(**arg): # 以*开始的参数,代表一个字典 print arg
>>> mul2(a=1,b=2,c=3,d=Ethon) {a: 1, c: 3, b: 2, d: Ethon}

 

python基础11(函数三)