yihau

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

本系列文章均是我学习廖雪峰老师的python教程中的记录。
谈一谈python的几种函数参数,除了像c、java那些函数的参数之外,python还有几种特别灵活的参数。
默认参数,可选参数,关键字参数,命名关键字参数。这么多种参数听起来让人很是头疼,不过使用得当可以使得函数的接口可以处理
更多复杂的计算,还可以简化调用函数的代码。
1、位置参数,位置参数也就是我们一般理解的最普通的参数,在调用函数的时候必须传入实参,程序才不会报错。
写一个计算x平方的函数:

def power(x):
    return n*n

在这个power的函数中,x就是最普通的位置参数,在调用函数时必须传入参数,否则就会报错。比如power()。
2、默认参数,先看一个计算x的任意次方的例子,我们可能的需要传入另外一个n来计算x的n次方。

def power(x,n):
    s = 1;
    while n>0:
        n=n-1
        s=s*n

这样就可以通过传入n来计算x的任意次方了。比如power(x,3)就是计算x的立方。        
再来说默认参数,顾名思义默认参数就是有默认值的参数,比如我们计算x的n次方,可能多数计算的是平方,有些时候也会
计算x的3次方、4次方。。。我们想到如果n有个默认值是不是会让调用变的更加简洁一点呢?这样就是默认参数啦!来看定义

def power(x,n=2):
    s=1;
    while n>0:
        n=n-1
        s=s*n

只是在定义的时候给n赋值就好了,现在计算x的平方只需要power(x),同样可以计算x的立方power(x,3)。
不过有一点需要注意,定义函数的时候必选参数要在默认参数之前,不然会报错,如果第一个是默认参数,第二个是必选参数,那么
你调用时只写了一个实参那么这个参数到底是对应哪个形参呢。
3、可变参数,可变参数就是可以传入任意个数的参数,比如你要计算1+2+3+...+n就可以用可变参数

def sum(*args):
    sum =0
    for x in args:
        sum =sum+x
    return sum

看到函数的定义是不是想到了遍历list或者tuple啊!是的,可变参数就是把你的传入的实参组装成一个tuple来进行计算的
可以调用sum(1,2,3),sum()。不过定义中的*可不是指针,这里是python中定义可变参数的规定。
如果你已经有一个list,怎么使用这个sum呢,你最容易想到的肯定是sum(list[0].list[1]...),python中规定了更容易的方法
sum(*list)这样就可以成功的调用了,*list可以吧list中的元素当做可变参数传入函数。
4、关键字参数,可变参数是将传入的实参组成tuple,关键字参数则是把传入实参组成dict,

def person(name,age,**kw):
    print('name:',name,'age:',age,'other:',kw)

关键字参数有什么用?它可以扩展函数的功能。比如,在person函数里,我们保证能接收到name和age这两个参数,
但是,如果调用者愿意提供更多的参数,我们也能收到。比如
person('wang',20,city:'beijing')
也可以先组装一个dict再传入
extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, **extra)
**extra表示把extra这个dict的所有key-value用关键字参数传入到函数的**kw参数。
还有个命名关键字参数,自己都快晕了先消化消化。

posted on 2016-03-10 15:38  yihau  阅读(274)  评论(0编辑  收藏  举报