Python3进阶-7-函数式编程 map、reduce、filter、sorted、闭包、匿名函数

avatar 2024年03月18日22:25:54 0 123 views
博主分享免费Java教学视频,B站账号:Java刘哥

本文是Python基础进阶学习的最后一节

完整代码:https://github.com/saysky/python_demo

直接上代码

# 1. 函数作为参数
def add(x, y, f):
    return f(x) + f(y)


s = add(-1, 2, abs)
print(s)

# 2. map(f, list)函数,依次让list里的每个元素调用f函数,并收集结果为新的集合
s2 = map(abs, [-1, -2, -3, 1, 2, 3])  # 把每个元素取绝对值
for item in s2:
    print(item)

# 3. reduce 每次取2个元素,反复调用函数,最终返回
from functools import reduce


# 例1,求所有数之和
def f(x, y):
    return x + y


print(reduce(f, [1, 2, 3, 4, 5]))  # 输出 15


# 例2,将list转成一个数字
def f2(x, y):
    return x * 10 + y


print(reduce(f2, [1, 2, 3, 4, 5]))  # 输出 12345


# 4. filter 筛选,返回满足的元素为新列表

# 例1,求奇数
def is_odd(x):  # 是否为奇数
    return x % 2 == 1


s2 = filter(is_odd, [1, 2, 3, 4, 5])
for item in s2:  # 输出 1 3 5
    print(item)


# 例2,求不为空的数
def is_not_empty(s):
    return s and len(s.strip()) > 0


s3 = filter(is_not_empty, ['', 'a', '', 'b'])
for item in s3:  # 输出 1 3 5
    print(item)

# 5. 自定义排序
# 内置的sorted排序
print(sorted([3, 1, 2, 5, 4]))  # 数字升序排序
print(sorted(['bb', 'AA', 'CC'], key=str.lower, reverse=True))  # 字母倒序排序


# 对象集合排序


# 自定义排序字段
def k(item):
    return item[1]  # 按成绩排序,成绩是第二个字段


score = [('张三', 90), ('李四', 70), ('王五', 80)]
print(sorted(score, key=k))


# 6. 返回函数
# 可以定义子函数
def func():
    # 定义子函数
    def sub_func():
        print('调用子函数.')

    sub_func()


func()


# 返回函数和返回函数值有细微不同,返回函数会立即结束
# 返回函数
def sayHello():
    print('Hello')


def test():
    print('test')
    return sayHello  # 没有(),不会调用 sayHello()方法


result = test()  # 注意没有调用 sayHello()
result()  # 这里才调用sayHello


# 7. 闭包
# 闭包定义:在函数嵌套的前提下,内部函数使用了外部函数的变量,并且外部函数返回了内部函数
# 闭包主要用途:封装、保持状态、延迟执行
def outer_func(x):
    def inner_func(y):
        return x * y  # 调用步骤2,y=7

    return inner_func  # 调用步骤1,x=5


# 创建一个闭包实例
inner_func = outer_func(5)
print(inner_func(7))

# 8. 匿名函数,功能有限
result = [item for item in map(lambda x: x * x, [1, 2, 3, 4, 5])]
print(result)  # 输出 [1, 4, 9, 16, 25]

print(reduce(lambda x, y: x + y, [1, 2, 3, 4, 5]))  # 输出 15

# 9.decorator 类似java里的自定义注解,暂时略,后面有机会用到再补充

 

完整代码:https://github.com/saysky/python_demo

test15

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

avatar 登录者:匿名
匿名评论,评论回复后会有邮件通知

  

已通过评论:0   待审核评论数:0