青少年python系列目录_老程序员115的博客-CSDN博客
Python拥有丰富的内置函数,除此之外我们也可以定义创建自己的函数,经过一段时间的学习我们已经熟知python中函数的各种特性,这大大简化了我们的代码结构。在本节课中,我们将认识两种特别的函数,这两种函数在某种程度上可以进一步简化我们的代码结构。
一种是匿名函数,它不使用def关键字进行创建。
另一种是递归函数,可以帮助我们解决"斐波那契数列"这一数学问题。
通过对这两种函数的学习,将会使我们对函数的理解更上一层楼。
1 匿名函数
Python使用lambda关键字创造匿名函数。
关键字lambda表示匿名函数,冒号前面的n表示函数参数,可以有多个参数。匿名函数不是真的不能没有名字,而是指不再使用def语句这样标准的形式定义一个函数。
匿名函数不用写return,返回值就是该表达式的结果。匿名函数也不是我们常见函数那样是一个代码块,而是一个表达式,匿名函数是为了满足简单函数场景设计的。具有复杂逻辑的函数还是要用def关键字创建。
匿名函数可以通过赋值给一个变量调用,意味着,匿名函数可以作为参数进行传递。
这也意味着匿名函数可以嵌套使用。
相比较def关键字创建的函数,匿名函数具有以下的优点:
1.不用取名称,因为给函数取名是比较头疼的一件事,特别是函数比较多的时候
2.可以直接在使用的地方定义,如果需要修改,直接找到修改即可。
3.语法结构简单,不用使用def 函数名(参数名):这种方式定义,直接使用lambda 参数:返回值 定义即可
但缺点也很明显,相比较def函数,lambda是单一的表达式,而不是语句块,你仅能够在lambda中实现有限逻辑结构,更为复杂的逻辑结构还需要在def创建的函数中实现
2 递归函数
程序调用自身的编程技巧称为递归。
递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归函数只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
我们来做个比喻,让我们更好的理解递归。
一个小朋友坐在第10排,他的作业本被小组长扔到了第1排,小朋友要拿回他的作业本,可以怎么办?他可以拍拍第9排小朋友,说:“帮我拿第1排的本子”,而第9排的小朋友可以拍拍第8排小朋友,说:“帮我拿第1排的本子”...如此下去,消息终于传到了第1排小朋友那里,于是他把本子递给第2排,第2排又递给第3排...终于,本子到手啦!这就是递归,拍拍小朋友的背就是函数调用。
例如上面这个计算1+2+3+4+5=?的程序
在使用递归函数时,需要注意必须有一个明确的递归结束条件,称为递归出口。
如下例:
此时程序就不能求和了
2.1 斐波那契数列
斐波那契数列因数学家列昂纳多·斐波那契以兔子繁殖为例引入,故又称为兔子数列。
兔子数列描述:如果兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子,假设所有的兔子都不死,那么一年后可以繁殖多少对兔子呢?
1、1、2、3、5、8、13、21、34、55、89、144……
可以发现,这个数列从第3项开始,每一项都等于前两项之和。
使用递归函数输出指定项数的斐波那契数如下:
如上可以输出斐波那契数列的第二位数
总结
1、匿名函数
格式:函数名 = lambda 参数 :返回值
2、递归函数
直接或间接的调用自身的函数,称为递归函数。
3、斐波那契数列
这个数列从第3项开始,每一项都等于前两项之和。