目录
目标
到目前为止,我们学习了函数的许多知识。从参数上来看,函数可以有参数,也可以没有参数;从功能上看,函数有输出型的,也有返回型的;从名称上来看,函数可以有名称,也可以没有名称。今天,我们将对这些内容进行一个复习小结。
内置函数
通过前面的学习,我们知道了函数可以分为内置函数和自定义函数。内置函数是可以直接使用的,如图展示了两个常用的内置函数。len
函数,用于获取对象的长度或元素个数。type
函数,用于查询对象的数据类型。
无参函数
除了内置函数以外,我们还学习过自定义函数。定义的函数如果没有设置参数,就是无参函数;如果设置了参数,就是有参函数。
下面,我们通过无参函数来回顾下定义和调用函数的语法规则。
无参函数
自定义函数在使用时需要先定义,再调用。定义函数使用关键字def
,调用格式为:函数名()
示例中,定义和调用函数时,括号内没有传入参数,这就是无参函数。
有参函数
而在实际运用中,我们使用更多的还是有参函数。因为有参函数可以通过传入参数的方式,控制输出的结果的差异性。
下面,我们接着复习有参函数。
形参和实参
有参函数定义时,需要在括号设置参数,调用时也需要设置参数。定义函数时的参数叫形参,用于接收实参传递的数据。调用函数时的参数叫实参,用于给形参传递数据。示例中,实参"7.8折"会传递给形参discount。
对于有参函数的形参和实参,一方面,我们要熟悉它们最基础的概念和用法。另一方面,我们要了解形参和实参的一些特殊用法。
下面,我们先来介绍形参的特殊用法。
默认值形参
形参的特殊之处,就是可以设置默认值。实例中,radius是非默认值形参,pi是默认值形参,且默认值为3.14。再次提醒, 在定义函数时,必须先写非默认值形参,再写默认值形参。
在定义函数时,我们给形参pi设置了默认值3.14。所以,我们在调用函数中给默认值形参提供了实参值时,Python将优先使用实参值;否则,将使用形参的默认值。
在形参中,有默认值参数这种特殊的用法。而在实参中,也有一些特殊的用法,我们一起来回顾一下。
关键字实参与位置实参
对于实参,我们经常会用到位置实参,同时我们也要了解关键字实参。
示例中的第5行使用了关键字实参,即在括号内直接给形参赋值的方式传递数据。
示例中的第6行使用了位置实参,即在括号内传入具体的实参数据,按照位置顺序依次传递给形参。
缺少实参
还有一个易错点需要我们记住。因为,我们使用位置实参时,形参会按照位置顺序依次接收实参处的数据。所以,在调用函数时,缺少位置参数会导致程序报错。
print和return的区别
然后,我们再来复习一下定义函数时,使用print和return的区别。简单来说,函数中使用print
,是为了显示信息,将结果直接输出。使用return
,是为了返回结果。返回值可以用变量接走,继续使用该返回值做其它事。
如图,定义函数的代码块中使用了print
。当我们调用该函数时,程序执行函数的代码块,直接输出了结果。而这类函数有一个比较大的问题,就是我们没办法把结果拿去干其他事情。
下面,我们通过一个例子说明。
如图,调用函数能输出结果,但是调用函数的结果却不能用来比较大小。这是因为数据在函数内被直接输出,没有传到函数外。
如果,我们要将函数的运行结果,传递到函数外使用。那么,我们就需要用return关键字来将结果返回出来。
return
如图,定义函数的代码块中使用了return
。当我们调用该函数时,程序执行函数的代码块,会将结果返回给调用函数处。此时调用函数的代码等同于一个变量,我们可以用它来给其他变量赋值、与其他数据比大小等操作。
这里注意,对于使用return
的函数,如果我们只是调用该函数,不会有输出结果。如图,我们可以像使用print()输出变量一样,将调用函数的结果输出。
匿名函数
最后,对于匿名函数和递归的相关知识,我们能够理解并简单运用即可。通过前面的学习,我们知道匿名函数无需定义函数名,以 关键字 lambda 开头。包含return的简单函数,一般就可以使用匿名函数来进行改写。
递归
递归实现阶乘
当然,递归能实现一些经典问题,比如阶乘问题,斐波那契数列等等。一个正整数的阶乘是所有小于及等于该数的正整数的积,写作n!
。例如5!=5×4×3×2×1
。因为0的阶乘为1,所以,示例中设置终止条件为n等于0或1时,返回1。又因为阶乘是累乘,所以,递归的前进条件设置为:n * factorial(n-1)
。
总结
至此,函数的常见知识点就复习结束了。而对于函数的知识,我们尽量能够做到下面两点:
一、在自己敲代码的过程中,能利用函数简化代码。
二、在学习他人的函数时,能够看懂并理解其中代码的含义,并有效利用。