「python」 三个方面讲解函数的缺省参数

Python015

「python」 三个方面讲解函数的缺省参数,第1张

所谓缺省参数,在定义函数时,可以给某个参数指定一个默认值,具有默认值的参数就叫做缺省参数。调用函数时,如果没有传入缺省参数的值,则在函数内部使用定义函数时指定的参数默认值。

缺省参数的作用:

函数的缺省参数,将常见的值设置为参数的缺省值,从而简化函数的调用。

例如:对列表排序的方法

执行结果:

在参数后使用赋值语句,可以指定参数的缺省值。

不设置缺省参数:

执行结果:张三 是 男生

# 假设班上的男生比女生多,我们不传递True这个参数,让性别默认是男生

设置缺省参数:

执行结果:

提示:

1. 缺省参数,需要使用最常见的值作为默认值。

2. 如果一个参数的值不能确定,则不应该设置默认值,具体的数值在调用函数时,由外界传递。

一句话讲在定义函数时怎样指定函数的缺省参数的默认值,在形参后面跟上一个等号,等号后面跟上参数的默认值就可以了。可以看以上案例。

必须保证带有默认值的缺省参数在参数列表末尾。

所以,以下定义是错的:

PyCharm在错误的参数下面会有一个波浪线提示,告诉你要么给它挪到缺省参数前面,要么它也变成带有默认值的缺省参数。

在调用函数时,如果有多个缺省参数,需要指定参数名,这样解释器才能能够知道参数的对应关系。

执行结果:

第一个那个*x是*args的意思,就是任意个参数,C++里的 va_arg,...符号这种,python函数里可以有*args和**kwargs。

*args之后可以随便放有默认值的和没有默认值的。

因为这之后的任何东西都得用”y=1“”z=1“这种来赋值。

比如说第一个函数,def fun(*x, y=4, z),我写fun(1,2,3,4,5),这五个数全跑到*x里了。我想给y和z赋值必须要写fun(1,2,3,4,5,y=6,z=7)。相当于z跟有默认值的那种也差不多了。所以规定可以把z放在*x后面的任何位置,包括y=4后面,它们的位置关系已经没有用了。

规定def fun(x=4, y) y必须放在x前,就是要保留这种位置关系,要不我写fun(1),你说这个1是给x的还是y的?就有了歧义。所以必须要有正确的位置关系。但是*x后面所有东西都是用参数名赋值的,位置关系不起作用了,所以可以任意顺序了。

要理解规定背后的原因。同理,**kwargs放在最后,也是这个原因。消除歧义性。