上一篇:详解函数返回值和参数 | 手把手教你入门Python之四十三
下一篇:详解高阶函数和闭包 | 手把手教你入门Python之四十五
本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。
递归函数
<1>什么是递归函数
通过前⾯的学习知道⼀个函数可以调⽤其他函数。
如果⼀个函数在内部不调⽤其它的函数,⽽是⾃⼰本身的话,这个函数就是递归函数。
<2>递归函数的作⽤
举个例⼦,我们来计算阶乘 n! = 1 2 3 ... n
解决办法1:使⽤循环来完成
def cal(num):
result,i = 1,1
while i <= num:
result *= i
i+= 1
return result
print(cal(3))
看阶乘的规律
1! = 1
2! = 2 × 1 = 2 × 1!
3! = 3 × 2 × 1 = 3 × 2!
4! = 4 × 3 × 2 × 1 = 4 × 3!
...
n! = n × (n-1)!
解决办法2:使⽤递归来实现
def factorial(num):
result = 1
if num == 1:
return 1
result = num * factorial(num -1)
return result
print(cal(3))
原理
练习
使⽤递归实现斐波那契数列。1、1、2、3、5、8、13、21、34、……
递归的练习
匿名函数
⽤lambda关键词能创建⼩型匿名函数。这种函数得名于省略了⽤def声明函数的标准步骤。
lambda函数的语法只包含⼀个语句,如下:
lambda 参数列表: 运算表达式
如下实例:
sum = lambda arg1, arg2: arg1 + arg2
# 调⽤sum函数
print("Value of total : %d" % sum( 10, 20 ))
print("Value of total : %d" % sum( 20, 20 ))
以上实例输出结果:
Value of total : 30
Value of total : 40
Lambda函数能接收任何数量的参数但只能返回⼀个表达式的值
匿名函数可以执⾏任意表达式(甚⾄print函数),但是⼀般认为表达式应该有⼀个计算结果供返回使⽤。
python在编写⼀些执⾏脚本的时候可以使⽤lambda,这样可以接受定义函数的过程,⽐如写⼀个简单的脚本管理服务器。
自定义一个匿名函数的使用场景
应用场合
函数作为参数传递
>>> def fun(a, b, opt):
... print("a = " % a)
... print("b = " % b)
... print("result =" % opt(a, b))
...
>>> add = lambda x,y:x+y
>>> fun(1, 2, add) # 把 add 作为实参传递
a = 1
b = 2
result = 3
练习:
有⼀个列表
students = [
{'name': 'zhangsan', 'age': 18, 'score': 92},
{'name': 'lisi', 'age': 20, 'score': 90},
{'name': 'wangwu', 'age': 19, 'score': 95},
{'name': 'jerry', 'age': 21, 'score': 98},
{'name': 'chris', 'age': 17, 'score': 100},
]
要求,对上述列表⾥的数据按照score进⾏升序排序。
Sort方法的使用
Python中使⽤函数作为参数的内置函数和类: