在调用函数sum_1n(n)时,传入一个参数n,这是传入单个参数。Python支持更多格式的传入方式,可以传入任意个参数。接下来将介绍函数参数的一些定义及传入方式。
在定义函数时,如果需要传入参数,在括号里需要指明,如sum_1n(n)中的n,这类参数称为形式参数,简称形参。
在调用函数或执行函数时,函数括号里的参数,如sum_1n(100)中的100,就是实际参数,简称实参。
在具体使用时,有时为简便起见,不分形参和实参,有些参考资料上统称参数。
函数定义时可以没有参数、有一个参数或多个参数。如果有多个参数,在调用函数时可能需要多个实参。向函数传入实参的方式有很多,可以依据函数定义时的位置和顺序而定;可以使用关键字作为实参;还可以使用列表和字典作为实参等。接下来将介绍这些内容。
位置参数就是定义函数时与参数位置有关的参数,调用函数时,位置参数必须与定义函数时的顺序保持一致。
位置参数是必备参数,调用函数时根据函数定义的形参位置来传递实参。为了更好地说明这个原理,下面以函数sum_1n为例进行讲解。
假设现在修改一下要求,把从1开始累积,改为从任何一个小于n的数m(如m<n)开始累积,那么,m也需要作为参数。为此,修改函数sum_1n如下。
定义函数sum_1n时,指明了两个参数m和n(如果是多个参数,需要用逗号分隔),在调用函数sum_1n时,实参需要输入两个,而且这两个实参的位置及顺序必须与形参保持一致,如以下代码。
其中1,10或10,20就是位置实参。位置实参的顺序很重要,如果顺序不正确,可能报错或出现异常情况。
位置参数多了,记住各参数的位置和顺序将非常麻烦,而且还很容易出错。为改进这种纯粹依据位置来传递参数的方式,人们想到了定义函数时,用一些代表一定含义的单词(或关键字)来命名参数,然后将这些单词(或关键字)赋给对应值即可,无须考虑这些参数的位置或顺序,这样就方便多了。
为此,我们把函数sum_1n的形参改成有一定含义的单词,调用时直接给这些单词赋值即可。
调用函数时,说明参数名并赋给对应值即可,无须考虑它们的位置或次序。当然,实参名称必须与形参名称一致,否则将报错。
位置参数如果很多,要记住这些位置和顺序非常麻烦,使用关键字参数可有效解决位置参数带来的麻烦。不过如果参数很多,使用关键字参数也不是很方便,尤其是有些参数相对稳定或经常使用,所以关键字参数还有优化空间。可以对那些比较稳定或经常使用的形参指定默认值。在调用函数中给形参提供了实参时,Python将使用指定的实参值,否则将使用默认值。如此,在很多情况下调用函数时,就可以少写很多实参。
比如sum_1n(start, end)函数,其中start一般从1开始,所以形参start设置为1,即start=1。形参end也可以设置默认值,如end=10。如果end不设置默认值,定义函数时,需要把end放在前面,把含默认值的参数放在后面,这样可以使Python正确地解读位置参数。
修改sum_1n(start, end)函数,代码如下。
调用函数,代码如下。