一、默认参数

定义函数的时候,还可以有默认参数。

例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数:

>>> int('123')123>>> int('123', 8)83

int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,就用传入的参数。

可见,函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的参数来覆盖默认参数值。

我们来定义一个计算 x 的N次方的函数:

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

假设计算平方的次数最多,我们就可以把 n 的默认值设定为 2:

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

这样一来,计算平方就不需要传入两个参数了:

>>> power(5)25

由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:

# OK:def fn1(a, b=1, c=2):    pass# Error:def fn2(a=1, b):    pass

二、可变参数

如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数:

def fn(*args):    print (args)

可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数:

'''学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!'''>>> fn()()>>> fn('a')('a',)>>> fn('a', 'b')('a', 'b')>>> fn('a', 'b', 'c')('a', 'b', 'c')

可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。

定义可变参数的目的也是为了简化调用。假设我们要计算任意个数的平均值,就可以定义一个可变参数:

def average(*args):    sum = 0.0    if len(args) == 0:        return sum    for x in args:        sum = sum + x    return sum / len(args)

这样,在调用的时候,可以这样写:

>>> average()0>>> average(1, 2)1.5>>> average(1, 2, 2, 3, 4)2.4