python笔记之函数式编程,lambda表达式,内置高阶函数

定义:用一系列函数解决问题

函数可以赋值给变量,赋值后变量绑定函数

允许函数作为参数传入另一个函数

允许函数返回一个函数

def func01():
    print("func01")
    
#直接调用函数
func01()
#将函数赋给变量(右边的函数一定不能写小括号)
a=func01
#间接调用函数
a()
#通常用于函数参数传入 例如func01(fun02)

函数式编程适用范围:

多个函数主体逻辑相同,但核心算法不同(如下两个函数) 

def get_number_gt_100(list01):
    for number in list01:
        if number>100:
            yield number
            
def get_number_by_even(list01):
    for number in list01:
        if number%2==0:
            yield number

函数式编程后如下:

list01 = [1, 2, 5, 46, 69]

#封装:将变化点分为多个函数 如:condition01,condition02
#继承:将变化点抽象为参数,通过参数统一确定统一的方法,从而隔离通用函数与变化点函数 如func
#多态:编通用函数时调用参数,执行时传递变化点函数
#价值:增加新变化点函数,不影响通用函数
def condition01(number):
    return number > 100

def condition02(number):
    return number % 2 == 0

def get_number(func):
    for number in list01:
        if func(number):
            yield number

for item in get_number(condition02):
    print(item)

lambda表达式

 写法1:有参数有返回值(两者等价)

def func01(p1,p2):
    return p1>p2


func01=lambda p1,p2:p1>p2

写法2:无参数有返回值(两者等价)

def func02():
    return 100

func02=lambda:100

写法3:有参数无返回值(两者等价)

def func03(p1):
    print(p1)

func03=lambda p1:print(p1)

写法4:无参数无返回值(两者等价)

def func04():
    print(4)

func04=lambda :print(4)

语法:

lambda 参数:函数体

注意:

lambda能表达的函数,def都能表达,但是:

1,lambda不支持赋值语句

2,lambda不支持多条语句

 lambda表达式应用

作为实参传入函数

可以将上面的调用函数与变化点函数结合起来

def get_number(func):
    for number in list01:
        if func(number):
            yield number

for item in get_number(lambda number:number>100):
    print(item)

内置高阶函数

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__)

执行结果:

{'eid': 1001, 'did': 9002, 'name': '师父', 'money': 60000}

{'eid': 1003, 'did': 9002, 'name': '猪八戒', 'money': 20000}

# 3. max min 最值
emp = max(list_employees, key=lambda emp: emp.money)
print(emp.__dict__)

执行结果:
{'eid': 1001, 'did': 9002, 'name': '师父', 'money': 60000}

# 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)

执行结果:

[<__main__.Employee object at 0x00000296BD22F760>, <__main__.Employee object at 0x00000296BD17D280>, <__main__.Employee object at 0x00000296BD17D1F0>, <__main__.Employee object at 0x00000296BD17D580>, <__main__.Employee object at 0x00000296BD1DDA00>]
[<__main__.Employee object at 0x00000296BD1DDA00>, <__main__.Employee object at 0x00000296BD17D580>, <__main__.Employee object at 0x00000296BD17D1F0>, <__main__.Employee object at 0x00000296BD17D280>, <__main__.Employee object at 0x00000296BD22F760>]
(对象地址)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值