在《Python中参数具有默认值的函数》中提到,对于具有默认参数值的函数来说,在调用该函数时,可以指定其参数值,也可以不指定其参数值。
1 具有多个默认参数值的函数
对于具有多个默认参数值的函数来说,必须按顺序指定其参数值。如图1所示。
图1 具有多个默认参数值的函数
其中,自定义函数func()具有三个参数,这三个参数都具有默认参数值。在调用该函数时,必须按照顺序指定其参数值,即第一个参数值表示i的值,第二个参数值表示j的值,第三个参数值表示k的值。如果使用图2所示的代码调用func(),此时只想指定参数i和k的值,而参数j使用默认值,则不能得到想要的结果。
图2 没有指定所有参数值
从图2中可以看到,期望将i的值设置为1,j的值使用默认值,k的值设置为“world”,此时得到的结果并非是“1 1.1 world”,而是“1 world hello”,也就是说Python编译器将“world”的值赋值给了参数j。
2关键字参数
2.1使用方法
可以使用关键字参数解决上述问题。关键字参数指的是在调用具有参数默认值的函数时,使用参数的关键字来指定为哪个参数赋值,如图3所示。
图3 关键字参数
从图3中可以看出,使用关键字参数,将func()函数的参数i设置为1,参数k设置为“world”,而参数j使用默认值,此时的输出为期望的结果。
2.2 注意事项
在使用关键字参数调用函数时,需要注意以下几点。
2.2.1 不能在关键字参数后面使用非关键字参数
如图4所示。
图4 不能在关键字参数后面使用非关键字参数
其中,func()函数的i=1是关键字参数,而“world”是非关键字参数,此时编译器不知道将“world”赋值给参数j还是参数k,因此会报错。
2.2.2 不能对通过一个参数进行多次赋值
如图5所示。
图5 不能对通过一个参数进行多次赋值
其中,通过关键字参数对参数i进行了两次赋值,此时编译器报错。
2.2.3 不能使用未知关键字参数
如图6所示。
图6 不能使用未知关键字参数
其中,关键字参数m不是func()的关键字参数,因此编译器报错。