一、默认参数
定义函数的时候,还可以有默认参数。
例如Python自带的 int() 函数,其实就有两个参数,我们既可以传一个参数,又可以传两个参数:
代码语言:python代码运行次数:0复制>>> int('123')
123
>>> int('123', 8)
83
int()函数的第二个参数是转换进制,如果不传,默认是十进制 (base=10),如果传了,就用传入的参数。
可见,函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的参数来覆盖默认参数值。
我们来定义一个计算 x 的N次方的函数:
代码语言:python代码运行次数:0复制def power(x, n):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
假设计算平方的次数最多,我们就可以把 n 的默认值设定为 2:
代码语言:python代码运行次数:0复制def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
这样一来,计算平方就不需要传入两个参数了:
代码语言:python代码运行次数:0复制>>> power(5)
25
由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:
代码语言:python代码运行次数:0复制# OK:
def fn1(a, b=1, c=2):
pass
# Error:
def fn2(a=1, b):
pass
二、可变参数
如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数:
代码语言:python代码运行次数:0复制def fn(*args):
print (args)
可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数:
代码语言:python代码运行次数:0复制#Python学习交流群:711312441
>>> fn()
()
>>> fn('a')
('a',)
>>> fn('a', 'b')
('a', 'b')
>>> fn('a', 'b', 'c')
('a', 'b', 'c')
可变参数也不是很神秘,Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。
定义可变参数的目的也是为了简化调用。假设我们要计算任意个数的平均值,就可以定义一个可变参数:
代码语言:python代码运行次数:0复制def average(*args):
sum = 0.0
if len(args) == 0:
return sum
for x in args:
sum = sum x
return sum / len(args)
这样,在调用的时候,可以这样写:
代码语言:python代码运行次数:0复制>>> average()
0
>>> average(1, 2)
1.5
>>> average(1, 2, 2, 3, 4)
2.4