夜光序言:
我们总是在一片热闹的环境中装作极其冷静清高,却又在一片静寂中想要做出一些出格的事来凸显自己。
正文:
3.4 函数默认参数
3.4.1 目标
在 Python 语言中定义函数时可以预先为部分参数设置默认值,这样的好处是实际调用时可以不提供该参数的实际值,该参数使用默认值
目标就是来掌握函数参数默认值的规则。
3.4.2 默认参数的使用
函数默认参数就是在函数定义时为一些参数预先设定一个值,在调用时如果不提供这个参数的实际值就使用默认的参数值。
例 3-4-1:默认参数的函数
def fun(a,b=1,c=2):
print(a,b,c)
fun(0)
fun(1,2)
fun(1,2,3)
结果:
0 1 2
1 2 2
1 2 3
在 fun(0)调用中 a=0,而没有为 b,c 提供参数值,使用默认的 b=1,c=2 的值
在 fun(1,2)调用中 a=1,b=2,而没有为 c 提供参数值,使用默认的 c=2 的值
在 fun(1,2,3)调用中 a=1,b=2,c=3
函数调用时实际参数值时按顺序给函数参数的,也可以指定参数名称而不按顺序进行调用。
在 fun(a,b=1,c=2)中我们把 a 称为位置参数(positional argument),b,c 称为键值参数(keyword argument)。
例 3-4-2: 参数按名称指定
def fun(a,b=1,c=2):
print(a,b,c)
fun(0,c=4,b=2)
fun(0,c=4)
fun(b=2,a=1,c=4)
fun(a=0,c=4,b=2)
fun(c=1,b=3,a=2)
结果:
0 2 4
0 1 4
1 2 4
0 2 4
2 3 1
例如 fun(0,c=4,b=2)中 a=0,b=2,c=4
3.4.3 默认参数的位置
Python 规定默认的键值参数必须出现在函数中没有默认值的位置参数的后面,例如下面函数是正确的:
def fun(a,b=1,c=2):
print(a,b,c)
但是下列函数是错误的:
def fun(a=0,b,c=2):
print(a,b,c)
因为键值参数 a=0 出现在位置参数 b 的前面。
不但在定义函数时要求键值参数出现在位置参数的后面,在调用时也要求键值参数在位置参数的后面,例如:
def fun(a,b=1,c=2):
print(a,b,c)
那么调用:
fun(a=0,1,c=2)
是错误的,因为"a=0"是键值参数,它出现在位置参数"1"的前面,但是下列调用时正确
的:
fun(0)
fun(0,1)
fun(0,c=3)
fun(a=0)
一般来说实际的位置参数值可以赋值给函数的位置参数和键值参数,例如:
fun(0,1)
实际的键值参数也可以赋值给函数的位置参数与键值参数,例如:
fun(a=0,c=3)
3.4.4 【案例】print 函数的默认参数
1、案例描述
print 函数是使用最频繁的函数之一,了解它的参数结构是是十分重要的。
2、案例分析
在 Python 的">>>"提示符下输入"help print"回车,可以看到 print 语句的函数参数如下:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
参数 sep=' ',表示 print 中各个输出项的分隔符号是空格。
end='\n',表示 print 的结束符号是换行,这就是为什么 print 输出的内容占一行的原因。
file=sys.sdout,表示输出的内容默认到标准输出设备即控制台。
flush=False,表示输出的内容不是即刻发送到输出端。
3、案例分析
我们设计程序改变 sep、end 参数可以看到 print 语句的不同输出结果。
print(1,2)
print(1,2,sep='-')
print("line")
print('line',end='*')
print('end')
结果:
1 2
1-2
line
line*end
由此可见 print(1,2)输出 1 与 2 的默认分隔符号是空格,但是 print(1,2,sep='-')输出 1与 2 的分隔符号是"-"。
print('line')输出的'line'占一行,但是 print('line',end='*')输出'line*',而且不占一行,最后 print('end')的'end'接在后面。