函数式编程
用一系列函数解决问题
- 函数可以赋值给变量,赋值后变量绑定函数
- 允许将函数作为参数传入另一个函数
- 允许函数返回一个函数
- 高阶函数:将函数作为参数或返回值的函数
函数作为参数
将核心逻辑传入方法体,使该方法的适用性更广,体现了面向对象的开闭原则
list01 = [342, 4, 54, 56, 6776]
# 定义函数,在列表中查找第一个大于100的数
def get_number_gt_100():
for number in list01:
if number > 100:
return number
# 定义函数,在列表中查找第一个偶数
def get_number_by_even():
for number in list01:
if number % 2 == 0:
return number
# 参数:得到的是列表中的元素
# 返回值:对列表元素判断后的结果(True False)
def condition01(number):
return number > 100
def condition02(number):
return number % 2 == 0
# 通用函数
def find_single(condition): # 抽象
for item in list01:
# if number > 100:
# if condition01(item):
# if condition02(item):
if condition(item):# 统一
return item
# 变化点函数:查找小于10的数据
def condition03(number):
return number < 10
print(find_single(condition03))
lambda 表达式
是一种匿名方法
- 作为参数传递时语法简洁,优雅,代码可读性强
- 随时创建和销毁,减少程序耦合度
- 形参没有可以不填
- 方法体只能有一条语句,且不支持赋值语句
# 语法
变量 = lambda 形参: 方法体
# 调用
变量(实参)
演示
from common.iterable_tools import IterableHelper
# 定义函数,在列表中查找所有大于100的数
# def condition01(number):
# return number > 100
# 定义函数,在列表中查找所有偶数
# def condition02(number):
# return number % 2 == 0
list01 = [342, 4, 54, 56, 6776]
for item in IterableHelper.find_all(list01,lambda number: number > 100):
print(item)
for item in IterableHelper.find_all(list01,lambda number: number % 2 == 0):
print(item)
内置高阶函数
- map(函数,可迭代对象) : 使用可迭代对象中的每个元素调用函数,将返回值作为新可迭代对象元素;返回值为新可迭代对象
- filter(函数,可迭代对象) : 根据条件筛选可迭代对象中的元素,返回值为新可迭代对象
- sorted(可迭代对象,key = 函数,reverse = bool值) : 排序,返回值为排序结果
- max(可迭代对象,key = 函数) : 根据函数获取可迭代对象的最大值
- min(可迭代对象,key = 函数) : 根据函数获取可迭代对象的最小值
演示
class Employee:
def __init__(self, eid, did, name, money):
self.eid = eid # 员工编号
self.did = did # 部门编号
self.name = name
self.money = money
# 员工列表
list_employees = [
Employee(1001, 9002, "师父", 60000),
Employee(1002, 9001, "孙悟空", 50000),
Employee(1003, 9002, "猪八戒", 20000),
Employee(1004, 9001, "沙僧", 30000),
Employee(1005, 9001, "小白龙", 15000),
]
# 1. map 映射
# 需求:获取所有员工姓名
for item in map(lambda item: item.name, list_employees):
print(item)
# 2. filter 过滤器
# 需求:查找所有部门是9002的员工
for item in filter(lambda item: item.did == 9002, list_employees):
print(item.__dict__)
# 3. max min 最值
emp = max(list_employees, key=lambda emp: emp.money)
print(emp.__dict__)
# 4. sorted
# 升序排列
new_list = sorted(list_employees, key=lambda emp: emp.money)
print(new_list)
# 降序排列
new_list = sorted(list_employees, key=lambda emp: emp.money, reverse=True)
print(new_list)
最后一次更新于2022-11-02 09:15
0 条评论