递归函数
概念:直接或简间接用本身的函数
直接调用:
def aaa():
print('from aaa')
aaa()
aaa()
间接调用
def aaa():
print('from aaa')
bbb()
def bbb():
print('from bbb')
aaa()
aaa()
这种没有尽头的递归是没有意义的,类似于死循环。python中有明确的定义递归调用最大的次数:1000次。用代码去验证可能会有些许偏差(997 998...)
尝试编写递归函数
推导指定某个人的正确年龄
eg: A B C D E 已知E是18 求A是多少
def getage(num):
if num == 5:
return 18
else:
return getage(num + 1) + 2
print(getage(3))
匿名函数
1.定义:匿名函数就是没有函数名的函数
2.语法结构:
lambda 形参: 返回值
3.应用案例:
(lambda x: x + 1)(123) 直接调用
res = lambda x: x + 1 命名调用
print(res(123))
4.应用场景:主要配合其他内置函数一起使用,用于减少代码
内置函数
1.map() 映射
l1 = [11, 22, 33, 44, 55, 66]
需求:将列表中所有的数据值自增20:
方法1:列表生成式:
res = [i+20 for i in l1]
print(res)
方法2:map函数
res = map(lambda x:x+20, l1)
print(res)
print(list(res))
2.filter() 过滤器
l1 = ['jason', 'kevin', 'oscar', 'tony']
需求:移除数据值里面的jason
方法1:列表生成式
new_l1 = [ i for i in l1 if i != 'jason']
print(new_l1)
方式2:filter函数
res = filter(lambda i:i != 'jason', l1)
print(res)
print(list(res))
3.reduce() 整合
l2 = [1, 2, 3]
需求:求列表中所有数据值的和
方式1:sum()
res = sum(l1)
print(res)
方式2:reduce() 使用前要先导入模块
from functools import reduce
res = reduce(lambda x,y:x+y, l1)
print(res)
res = reduce(lambda x, y: x + y, l2, 100)
print(res)
4.zip() 拉链 将多个数据集拉到一起组成一个数据集
4.1两个元素集
n1 = [1,2,3,4]
n2 = [11,22,33,44]
res = zip(n1,n2)
print(res)
print(list(res))
4.2三个元素集
n1 = [1,2,3,4]
n2 = [11,22,33,44]
n3 = 'jack'
res = zip(n1,n2,n3)
print(res)
print(list(res))
4.3元素集长度不等
n1 = [1,2,3,4,5,6,7]
n2 = [11,22,33,44]
n3 = 'jack'
res = zip(n1,n2,n3)
print(res)
print(list(res))
匿名函数内置函数混合使用
max()
l1 = [223, 3423, 123, 24, 34, 35, 435, 3, 24, 3534, 53, 24, 234, 132, 4234, 456, 456, 5345, 4, 234, 345, 23, 2123432]
res = max(l1)
print(res)
dic = {
'jason': 100,
'aj': 123,
'Bason': 9999999,
'zero': 888
}
def index(k):
return dic.get(k)
res = max(dic, key=index)
print(res)
"""
A-Z 65-90
a-z 97-122
"""