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

 

posted @ 2020-04-19 10:51  苍山如海,残阳如血  阅读(232)  评论(0)    收藏  举报