python阶乘匿名函数_学不会的Python函数——递归函数和匿名函数

1.递归函数

我们知道,一个函数的内部可以调用其他函数。但是,吐过一个函数在内部不调用其他的函数,而是调用自身的话这个函数就是递归函数。

接下来,通过一个计算阶乘n! = 1 * 2 * 3 * ... * n的例子来演示递归函数的使用。

def fn(num):

if num == 1:

result = 1

else:

result = fn(num - 1) * num

return result

n = int(input("请输入一个正整数:"))

print("%d! ="%n,fn(n))

运行结果:

接下来通过图来描述阶乘5!算法的执行原理。

2.匿名函数

简单来说,匿名函数就是没有名称的函数,也就是不再使用def语句定义的函数。如果要声明匿名函数,则需要使用lambda关键字,匿名函数的声明格式如下:

lambda[arg1[,arg2,...,argn]]:expression

上述格式中,"[arg1[,arg2,...,argn]]"表示的是函数的参数,"expression"表示的是函数的表达式。

sum = lambda arg1, arg2: arg1 + arg2

#调用sum函数

print("运行结果:", sum(10,20))

print("运行结果:", sum(20,20))

运行结果:

需要注意的是,使用lambda声明的匿名函数能接受任何数量的参数,但只能返回一个表达式的值。匿名函数不能直接调用print(),因为lambda需要一个表达式。

某些场景下,匿名函数非常有用。假设之前我们要对两个数进行运算,如果希望声明的函数支持所有的运算,可以将匿名函数作为函数参数传递。

def fun(a,b,opt):

print("a =%d" %a)

print("b =%d" %b)

print("result = ",opt(a,b))

fun(11,22,lambda x, y:x + y)

print("-------------------")

fun(11,22,lambda x,y:x-y)

运行结果:

除此之外,匿名函数还通常作为内置函数的参数来使用。

students = [

{"name":"喜小乐","age":18},

{"name":"石敢当","age":17},

{"name":"扬州蟹","age":19}

]

#按name排序

students.sort(key = lambda x:x["name"])

print("按name排序后的结果为:",students)

#按age排序

students.sort(key = lambda x:x["age"])

print("按age排序后的结果为:",students)

运行结果:注意:与def相比,lambda创建的函数有很多不同的地方。def创建的函数是有名称的,而lambda没有函数名称,这是最明显的区别之一。

lambda返回的结果通常是一个对象或者一个表达式,它不会将结果赋给一个变量,而def则可以。

lambda只是一个表达式,函数体比def简单很多,而def是一个语句。

lambda表达式的冒号后面只能有一个表达式,def则可以有多个。

像if或for等语句不能用于lambda中,def则可以。

lambda一般用来定义简单的函数,而def可以定义复杂的函数。

lambda函数不能共享给别的程序调用,def可以。

Python其实没有那么难。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值