递归函数,匿名函数,内置函数

195 阅读3分钟

递归函数

概念:直接或简间接用本身的函数
直接调用:
    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)  
    方法2map函数
    res = map(lambda x:x+20, l1)
        print(res) # <map object at 0x000001C5F3C13FA0>
        print(list(res)) # [31, 42, 53, 64, 75, 86]  记得转换类型成list
        
2.filter()  过滤器
l1 = ['jason', 'kevin', 'oscar', 'tony']
需求:移除数据值里面的jason
    方法1:列表生成式
    new_l1 = [ i for i in l1 if i != 'jason']
		print(new_l1)
    方式2filter函数
    res = filter(lambda i:i != 'jason', l1)
        print(res)  # <filter object at 0x0000027CDCC13FA0>
        print(list(res))  # ['kevin', 'oscar', 'tony']

3.reduce() 整合
l2 = [1, 2, 3]
需求:求列表中所有数据值的和
    方式1sum()
    res = sum(l1)
		print(res)
    方式2:reduce()  使用前要先导入模块
    from functools import reduce
        res = reduce(lambda x,y:x+y, l1)
        print(res)  
        #原理:lambda有两个参数xy,代表第一次从列表中取两个值相加,第二次用第一次相加的结果和第三个数相加,以此类推。reduce()第三个参数表示把前面的值整合完了之后再加上第三个参数。
        res = reduce(lambda x, y: x + y, l2, 100)
        print(res)  # 106
        
4.zip()  拉链  将多个数据集拉到一起组成一个数据集
4.1两个元素集
    n1 = [1,2,3,4]
    n2 = [11,22,33,44]
    res = zip(n1,n2)
    print(res)  # <zip object at 0x000001B525A53640>
    print(list(res))  # [(1, 11), (2, 22), (3, 33), (4, 44)]
4.2三个元素集
    n1 = [1,2,3,4]
    n2 = [11,22,33,44]
    n3 = 'jack'
    res = zip(n1,n2,n3)
    print(res)  # <zip object at 0x000001E3566E5C00>
    print(list(res))  # [(1, 11, 'j'), (2, 22, 'a'), (3, 33, 'c'), (4, 44, 'k')]
4.3元素集长度不等  # 以短的数据集为准
    n1 = [1,2,3,4,5,6,7]
    n2 = [11,22,33,44]
    n3 = 'jack'
    res = zip(n1,n2,n3)
    print(res)  # <zip object at 0x000001E3566E5C00>
    print(list(res))  # [(1, 11, 'j'), (2, 22, 'a'), (3, 33, 'c'), (4, 44, 'k')]

匿名函数内置函数混合使用

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)  # 2123432

dic = {
    'jason': 100,
    'aj': 123,
    'Bason': 9999999,
    'zero': 888
}

def index(k):
    return dic.get(k)
# res = max(dic, key=lambda k: dic.get(k))
res = max(dic, key=index)
print(res)  # Bason
# print('A' > 'a')
"""
A-Z   65-90
a-z   97-122
"""