打开《Python入门与实战》_一步步学会Python_8.4.2 案例解析
133
2023-10-19
【摘要】 本书摘自《Python3快速入门与实战》一书中第4章,第5.6节,由肖冠宇、杨捷等编著。
4.5 递归函数
一个函数在其函数体内调用函数自身,这样的函数就是递归函数。递归函数原理是使用 一个函数通过不断地调用函数自身来实现循环处理数据,直到处理到最后一步,再将每一步 的计算结果向上一步逐级返回。
注意:在使用递归的过程中一定要有结束递归的判断,否则递归会无限制地执行下去, 造成死循环,直到程序报错。
例4- 12 使用递归函数计算3的阶乘(源代码位置: chapter04/4.5递归函数.py)。 案例代码如下:
def factorial func(num)
if num>1:
retumn num* factorial func(num- 1)
else:
#结束递归的判断,当num=1 时,已经递归到了最后一步,直接返回1
return num
#计算3的阶乘
print(factorial func(3))
运行结果如下:
6
在数学中阶乘的实现步骤:
1!=1
2!=2*1
3!=3*2*1
4!=4*3*2*1
··
n!=n*(n- 1)* … *1
使用递归函数计算3的阶乘程序执行步骤:
第1步:3* factorial func(3-1)等价于3* factorial func(2), 此时等待 factorial func(2)的 返回值。
第2步:2*factorial func(2-1)等价于2* factorial func(1), 此时等待 factorial func(1)的 返回值。
第 3 步 :factorial func(1)在函数内通过执行 if条件判断,进入到 else 代码块,已经是 最后一步,直接将1返回到第2步。第2步得到了factorial func(1) 的返回值,执行该步后 续代码,将计算结果返回到第1步。第1步得到 factorial func(2) 的返回值,执行该步后续 代码,第1 步已经没有再向上返回的步骤,程序结束,将3的阶乘最终结果返回给调用 factorial func(3)的地方。
4.6 匿名函数
在前面章节中已经介绍了函数的定义和使用,之前在定义函数时都要给函数起个名字, 那么是不是函数都必须要有名字呢?答案是否定的。在 Python 中有一种没有名字的函数, 叫做匿名函数。匿名函数定义不需要使用 def 关键字,也不需要设置函数名称,在函数定义 时使用lambda 关键字声明即可。
匿名函数语法格式: lambda 参数列表:表达式
匿名函数中参数列表的参数数量没有个数限制,多个参数之间用逗号隔开。需要特别注 意的是匿名函数会将表达式的计算结果自动返回,不需要使用return关键字。
匿名函数的用法:可以把匿名函数赋值给一个变量,也可以把匿名函数作为参数传入其 他函数中。
1. 将匿名函数赋值给变量,通过变量名调用匿名函数
例4- 13 计算两个数字的和(源代码位置: chapter04/4.6匿名函数.py)。 案例代码如下:
#把匿名函数赋值给一个变量
sum =lambda x,y:x+y
#通过变量名称调用匿名函数
print(sum(10,20))
运行结果如下:
30
解析:将计算两个变量和的匿名函数赋值给一个变量,通过变量调用匿名函数,使用非 常灵活方便。
2. 匿名函数作为普通函数的参数
例4- 14 根据不同的匿名函数对两个数字进行求值计算(源代码位置: chapter04/4.6 匿 名函数.py)。
案例代码如下:
def x y compute(x,y,func):#func 是匿名函数
print("x={}".format(x))
print("y={}".format(y))
result = func(x,y)#对x 和y 两个参数使用 func匿名函数进行计算
print("result={".format(result))
#传入的匿名函数用于求两个数的和
x y compute(3,5,lambda x,y:x+y)
#传入的匿名函数用于求两个数的乘积
x y compute(3,5,lambda x,y:x*y)
运行结果如下:
x=3
y=5
result=8
x=3
y=5
result=15
解析:定义函数 x y compute 时,在函数内并没有定义计算逻辑,而是在函数参数中设 置匿名函数作为参数,在函数体内采用匿名函数的计算逻辑。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~