4.2 函数的参数与返回值
函数的声明可以包含一个形参列表,函数在被调用时,通过形参列表接收调用程序传递过来的实参列表,函数体中的代码引用这些参数变量从而实现某些特定的功能。函数可以使用return语句返回值,如果没有return语句则函数没有返回值,即返回值为空。
4.2.1 函数参数
Python中的函数参数主要有4种。
● 位置参数。调用函数时传入实参的数量和顺序必须和定义函数时一致。
● 关键字参数。通过“键-值”形式加以指定,可以让函数更加清晰,容易使用,同时也清除了参数的顺序要求。
● 默认参数。定义函数时为参数提供的默认参数值,调用函数时,默认参数的值可传可不传。注意:所有的位置参数必须出现在默认参数前,包括函数定义和调用。
● 可变参数。定义函数时,有时无法确定调用时会传递多少个参数。此时,可用定义可变参数的方法来进行参数传递。
1.默认参数
在调用函数的时候,往往会发现很多函数提供了默认的参数。默认参数为程序人员提供了极大的便利。
【例4-5】编写程序计算利息,其中天数的默认参数值为1,年化利率的默认参数值为0.03,即3%。
参考程序如下:
程序运行结果如下:
当仅需计算单日利息时,只要输入本金的数量即可,如本例中在调用函数时,传入实参5000本金即可计算单日的利息,其他参数采用默认参数值。
2.位置参数
定义函数时需要按顺序定义函数的各个参数。调用函数时必须按照正确的顺序将实参传入函数,即实参和形参的顺序必须一一对应,且必须全部传递。
【例4-6】编写程序,定义一个含有两个参数的函数site(x,y),程序调用函数时,参数值按照函数形参的位置顺序进行传递。
参考程序如下:
程序运行结果如下:
3.关键字参数
根据形参的参数名来确定传入的参数值。通过此方式传入的实参不再需要与形参的位置完全一致,只要将参数名写正确即可。
【例4-7】编写程序,定义一个含有两个参数的函数site(x,y),函数调用通过“键-值”形式指定参数值。
参考程序如下:
程序运行结果如下:
通过例子可以看出,使用关键字参数形式不需要考虑参数位置顺序的问题。
4.可变参数
使用∗args和∗∗kwargs可以定义可变参数。其中∗args参数用于在传递参数时,在原有的参数后添加0 个或多个参数,这些参数将会被放在元组内并传入函数中。∗∗kwargs用于在原有的参数后添加任意数量的关键字可变参数,这些参数会被放到字典内并传入函数中。带一个星号前缀的可变参数放在位置参数或关键字参数之后,带两个星号前缀的参数必须在所有参数之后,顺序不可以调转。
【例4-8】编写程序,定义一个函数var_args(x,y,∗args,∗∗kwargs),包含两个普通位置参数x、y,一个任意数量的位置参数∗args,一个任意数量的关键字可变参数∗∗kwargs。函数调用通过普通位置参数值传递、任意数量位置参数值传递,以及任意数量关键字可变参数“键-值”对的形式实现。
参考程序如下:
程序运行结果如下:
例子中,参数值1和2分别按照位置参数顺序传递给x和y;3、4和5被放在元组内传递给参数args;a='c',b=1以关键字“键-值”对的形式传递给可变参数kwargs。
4.2.2 函数返回值
函数可以处理一些数据,并返回一个或一组值。函数返回的值称为返回值。函数也可以没有返回值,没有返回值的函数类似于其他编程语言中的过程。如【例4-8】中定义的函数执行了print操作但无返回值,print函数仅仅输出对象,输出的对象无法保存或调用,如果想要保存或调用函数的返回值,需要用到return函数。
【例4-9】编写程序,调用函数分别计算1天的单日利息和10天的利息收入。
参考程序如下:
程序运行结果如下: