一、匿名函数
1、函数作为参数
def add(a, b):
return a + b
def minus(a, b):
return a - b
def main(function, a, b):
return function(a, b)
result = main(add, 10, 20)
print(result)
result = main(minus, 10, 20)
print(result)
2、lambda函数
①语法结构:lambda:参数1,参数2....参数n:一行代码
②整个lambda函数只能有一行代码
③自动返回代码的运行结果
④lambda函数一般会直接作为实参传递其他函数
result = main(lambda a, b: a + b, 10, 20)
print(result)
result = main(lambda a, b: a - b, 10, 20)
print(result)
3、map函数,他会将传入的序列中的每一个元素通过一个lambda函数进行修改
ls = [1, 2, 3, 4, 5, 6]
result = list(map(lambda n: n ** 2, ls))
print(result)
4、filter函数,他会根据lambda函数过滤条件对序列进行筛选
ls = [1, 2, 3, 4, 5, 6]
result = list(filter(lambda n: n % 2 == 0, ls))
print(result)
5、sort函数,根据lambda函数进行排序
ls = [1, 2, 3, 4, '10', '20']
result = list(sorted(ls, key=lambda n: int(n)))
print(result)
例题:1、列表中的每一个元素都是圆的半径,请生成一个新列表保存,每一个半径对应的面积
ls = [1, 2, 3, 4, 5, 6, 7, 8, 9]
result = list(map(lambda r: 3.14 * r * r, ls))
print(result)
2、生成一个只有质数的新列表
def isPrime(num):
if num == 1:
return False
else:
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
return False
else:
return True
result = list(filter(isPrime, ls))
print(result)
二、递归函数
自己调用自己的函数就叫递归函数递归本质分治思想,它的思路通常跟我们正常思维不一样递归必须具备两个条件①自己调用自己②要有终止递归的条件
import time
def test():
test()
test() # python对递归函数做了限制递归次数不能超过1000次
print("123123")
1、求自然数n以内的和
①def _sum(n):
result = 0
for i in range(n):
result += i
return result
print(_sum(100))
② n = 100 (递归)
def _sum(n):
if n == 0:
return 0
else:
return n + _sum(n - 1)
# 100 + 99 + 98 + ......+ 3 + 2 + 1 + 0
print(_sum(100))
2、求第n项斐波那契数列的值
def fib(n):
if n == 1 or n == 2:
return 1
else:
return fib(n - 1) + fib(n - 2)
上楼问题:上楼梯有两种方式
①一次跨一个台阶
②一次跨2个台阶问上到第n层 有多少种上法
start = time.time()
print(fib(40))
end = time.time()
print(end - start)