python12 函数式编程、lambda表达式
一、函数式编程:函数可以作为参数传递。隐含面向对象思想,相当于函数参数作为父类参数,传递的参数是子类函数,调用父执行子。
1 """ 2 函数式编程 思想 3 练习:exercise05.py 4 """ 5 6 class SkillData: 7 def __init__(self,id,name,atk_ratio,duration): 8 self.id = id 9 self.name = name 10 self.atk_ratio = atk_ratio 11 self.duration = duration 12 13 def __str__(self): 14 return "技能数据是:%d,%s,%d,%d"%(self.id,self.name,self.atk_ratio,self.duration) 15 16 list_skill = [ 17 SkillData(101,"乾坤大挪移",5,10), 18 SkillData(102,"降龙十八掌",8,5), 19 SkillData(103,"葵花宝典",10,2), 20 ] 21 22 # 需求1:获取攻击比例大于6的所有技能 23 def find01(): 24 for item in list_skill: 25 if item.atk_ratio > 6: 26 yield item 27 28 # 需求2:获取持续时间在4--11之间的所有技能 29 def find02(): 30 for item in list_skill: 31 if 4<item.duration<11: 32 yield item 33 34 # 需求3:获取技能名称大于4个字并且持续时间小于6的所有技能 35 def find04(): 36 for item in list_skill: 37 if len(item.name) > 4 and item.duration < 6: 38 yield item 39 40 # "封装"(分而治之 变则疏之) 41 # 将每个变化的条件,单独定义在函数中. 42 def condition01(item): 43 return item.atk_ratio > 6 44 45 def condition02(item): 46 return 4<item.duration<11 47 48 def condition03(item): 49 return len(item.name) > 4 and item.duration < 6 50 51 # "继承"(隔离变化) 52 def find(func_condition): 53 """ 54 通用的查找方法 55 :param func_condition: 查找条件,函数类型. 56 函数名(变量) --> 返回值bool类型 57 :return: 58 """ 59 for item in list_skill: 60 # "多态":调用父(变量),执行子(具体函数). 61 # 不同子类重写父类方法,执行逻辑不同. 62 63 # if item.atk_ratio > 6: 64 # if condition01(item): 65 if func_condition(item): 66 yield item 67 68 for item in find(condition01): 69 print(item) 70 71 for item in find(condition02): 72 print(item)
二、lambda表达式:匿名函数,如:lambda item :item--------------->fun a(item): return item
1 """ 2 lambda 匿名函数 3 语法:lambda 参数列表:函数体 4 注意:函数体自带return 5 练习1:将exercise06.py中,使用def定义的函数, 6 改为使用lambda. 7 8 """ 9 from common.list_helper import * 10 11 list01 = [43, 4, 5, 5, 6, 7, 87] 12 13 # def condition01(item): 14 # return item % 2 == 0 15 # 16 # def condition02(item): 17 # return item > 10 18 # 19 # def condition03(item): 20 # return 10 < item < 50 21 22 # for item in ListHelper.find_all(list01, condition02): 23 # print(item) 24 25 for item in ListHelper.find_all(list01, lambda item: item % 2 == 0): 26 print(item) 27 28 29 # ------------------------------ 30 # 无参数函数 --> lambda 31 def fun01(): 32 return 100 33 34 35 a = lambda: 100 36 re = a() 37 print(re) 38 39 40 # 多参数函数 --> lambda 41 def fun02(p1, p2): 42 return p1 > p2 43 44 45 b = lambda p1, p2: p1 > p2 46 re = b(1, 2) 47 print(re) 48 49 # 无返回值函数 --> lambda 50 def fun03(p1): 51 print("参数是:", p1) 52 53 54 c = lambda p1: print("参数是:", p1) 55 c(100) 56 57 # 方法体只能有一条语句,且不支持赋值语句 58 def fun04(p1): 59 p1 = 2 60 61 # d = lambda p1:p1 = 2
浙公网安备 33010602011771号