1.匿名函数
# 1.匿名函数lambda # 简化代码 减少占用的内存 print('1.匿名函数lambda') def func(): print(10) func() func = lambda: print(10) # 出现警告的原因是: # 因为你把lambda表达式赋给了另一个变量。 # 但lambda表达式本就是一个匿名的函数, # PEP8规范并不推荐将lambda表达式赋值给一个变量, # 再通过变量调用函数这种方式。 # 这种方式不能体现lambda表达式的特色, # 基本只是复制def的功能, # 同时这个变量名其实也不是lambda表达式真正的函数名, # 还显得比def方式更容易混淆。 # 事实上lambda表达式的正确用法应该是在不分配变量的情况下使用 # lambda 形参: print(10) # 有一个返回值,并且只有一句代码 # 参数部分可有可无 def func0(a, b): return a+b print(func0(1, 2)) func00 = lambda a, b: a + b print(func00(1, 2)) # 排序 list1 = [[3, '1'], [1, '3'], [2, '2']] # for i in list1: # print(i[0]) # 输出前面的数字 list1.sort(key=lambda i: i[0]) # 根据list1每个元素中的第一个元素从小到大排序 print(list1) list1 = [[3, '1'], [1, '3'], [2, '2']] # for i in list1: # print(i[1]) # 输出后面的字符串 list1.sort(key=lambda i: i[1]) # 根据list1每个元素中的第二个元素从小到大排序 print(list1) list1 = [[3, '1:3'], [1, '3:2'], [2, '2:1']] # for i in list1: # print(i[1][-1]) # 输出字符串的最后一个字符 list1.sort(key=lambda i: i[1][-1]) # 根据list1每个元素中的第二个元素的-1索引位置的数据从小到大排序 print(list1)
2.高阶函数map
# 2.高阶函数map(func,list) # 映射出一个新的数据 print() print('2. map()') list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] map(lambda i: str(i), list1) # 将list1中的每个数据转换成str类型 # print(map(lambda i: str(i), list1)) # 打印出的是迭代器,而不是期望输出的数据 # for i in list1: # print(str(i)) print(list(map(lambda i: str(i), list1))) # for i in list1: # print(i+1) list2 = list(map(lambda i: i + 1, list1)) # list1中的每个数据+1 print(list2)
3.高阶函数reduce()
# 3.高阶函数reduce(func,list) # 累计 # 需要导入模块 from functools import reduce # 只导入了这一个函数 print() print('3. reduce()') list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] print(reduce(lambda a, b: a + b, list1)) # 求和 和sum()作用相同 print(reduce(lambda a, b: a * b, list1)) # 求积
4.高阶函数filter
# 4.高阶函数filter(func,list) 筛选 # 过滤函数 # 过滤不符合的表达式 # 过滤走不符合条件的数据,保留合乎条件的数据 print() print('4. filter()') list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0] # for i in range: # if i%2 !=0: print(list(filter(lambda i: i % 2 == 0, list1))) # 选出偶数
5.递归
# 5.递归 套娃 # 递归特点: # 1,函数内部自己调用自己 # 2,必须要有接口 print() print('5.递归') def func1(data): if data == 1: return 1 return data + func1(data - 1) print(func1(3)) # 3+2+1 print()
# 将列表中的每个数据输出 def func2(list0): if type(list0) == list: # 判断是否是列表 for i in list0: func2(i) else: print(list0) list1 = [1, 2, [3, [4, 5], [6, 7, 8]], [9, 0]] func2(list1)
# 今日作业 """ 用递归求5的阶乘(5*4*3*2*1) """ print() print('今日作业') def func3(data: int) -> int: """ 阶乘函数 :param data: :return: """ if data == 1: # 判断输入的数据是否为1 return 1 return data * func3(data - 1) print(func3(5))