Python重点知识五:函数式编程(面向过程)

"""
    函数式编程
    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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值