""" 函数式编程 1. 2.思想:多个函数,主体结构相同,但核心算法不同 def 功能1(): 相同代码 变化点一 def 功能2(): 相同代码 变化点二 分、隔、 def 变化点一(): def 变化点二(): def 通用函数(变化点): 相同代码 #变化点一 #变化点二 变化点(参数1,参数2): """ """ lambda 表达式 匿名函数 格式 lambda 参数 : 函数体 lambda能表示的函数,def都能 但是,lambda不能赋值,且只有一条语句 参数: 函数体: """ # 2.有参数有返回值 def fun01(p1, p2): return p1 > p2 func1 = lambda p1, p2: p1 > p2 # 2.无参数有返回值 def func02(): return True func2 = lambda: True # 3.有参数无返回值 def func03(p): print(p) func3 = lambda p: print(p) # 4.无参数无返回值 def func04(): print("aa") func4 = lambda: print("aa") def func05(p): p[0] = 100 # 注意1.lambda不支持赋值语句 # func5 = lambda p: p[0]=100 def func06(): for num in range(10): print(num) # 注意2.lambda函数体只能有1条语句 fun6 = lambda: eval('(num for num in range(10))') class Employee: def __init__(self, eid, did, name, money): self.eid = eid # self.did = did # 部门 self.name = name self.money = money def __repr__(self): return 'Employee(%s, %s, %s, %s)' % (self.eid, self.did, self.name, self.money) from common.iterable_tools import IterableHelper as Ith list_employees = [ Employee(1001, 9002, "师傅", 60000), Employee(1002, 9001, "孙悟空", 50000), Employee(1003, 9002, "猪八戒", 20000), Employee(1004, 9001, "沙僧", 30000), Employee(1005, 9001, "小白龙", 15000), ] # 1.工号是1003 # 2.薪资大于20000的数量 # 3.部门是9002的所有人 employee_1003 = Ith.find_single(list_employees, lambda item: item.eid == 1003) money_over_20000 = Ith.get_count(list_employees, lambda item: item.money > 20000) dept_9002 = Ith.find_all(list_employees, lambda item: item.did == 9002) def get_all_name(list_employees): for item in list_employees: yield item.name def get_all_eid_money(list_employees): for item in list_employees: yield item.eid, item.money def condition1(item): return item.name def condition2(item): return item.eid, item.money def get_all(iterable, condition): for item in iterable: yield condition(item) print(*get_all(list_employees, lambda item: item.name)) def sum(iterable, condition): value = 0 for item in iterable: value += condition(item) return value print(sum(list_employees, lambda item: item.money)) print(sum(list_employees, lambda item: item.eid)) def delete_single(iterable, condition): for i in range(len(iterable)): if condition(iterable[i]): del iterable[i] return True return False delete_single(list_employees, lambda item: item.eid == 1002) print(list_employees) delete_single(list_employees, lambda item: item.name == "小白龙") print(list_employees) """ 映射: map(条件,序列) #返回生成器 #打印需要重写str或者 repr 根据条件处理并获取,序列中对应的元素 过滤: filter(条件,序列) #返回生成器 #打印需要重写str或者 repr 根据条件判断并获取,序列中对应的元素 最大值: max(序列,key=条件) #返回元素 最小值: min(序列,key=条件) #返回元素 排序: 升:sorted(序列,key=条件) #返回一个新的列表 降:sorted(序列,key=条件,reverse=True) #返回一个新的列表 升:序列.sort(key=条件) #修改原序列 降:序列.sort(key=条件,reverse=True) #修改原序列 """ class Employee: def __init__(self, eid, did, name, money): self.eid = eid # self.did = did # 部门 self.name = name self.money = money def __repr__(self): return 'Employee(%s, %s, %s, %s)' % (self.eid, self.did, self.name, self.money) list_employees = [ Employee(1001, 9002, "师傅", 60000), Employee(1002, 9001, "孙悟空", 50000), Employee(1003, 9002, "猪八戒", 20000), Employee(1004, 9001, "沙僧", 30000), Employee(1005, 9001, "小白龙", 15000), ] # 获取对象列表中的id并减1 print(list(map(lambda e: e.eid-1, list_employees))) print(list(filter(lambda e: e.money <40000, list_employees))) print(max(list_employees, key=lambda e: e.money)) print(sorted(list_employees, key=lambda e: e.money, reverse=True)) list_employees.sort(key=lambda e: e.money) print(list_employees)
Python重点知识五:函数式编程(面向过程)
于 2023-04-11 09:11:36 首次发布