美文网首页初学者
Python函数式编程:map reduce filter la

Python函数式编程:map reduce filter la

作者: 我爱学python | 来源:发表于2020-03-26 16:07 被阅读0次

    lambda

    匿名函数,核心是作为算子,处理逻辑只有一行但具有函数的特性,核心用于函数式编程中

    三元运算符

    其实本质上是if分支的简化版,满足条件返回 if 前面的值,不满足条件返回 else后面的值

    # 100 < 100 返回 False, 则 返回 else后面的值
    value = 100 if 100 < 100 else 10
    print(value) 
    

    map

    映射函数(依次把可迭代对象(可多个)中的值依次传递到函数中,然后返回生成器(长度以最短的为基础))

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    numbers = [1, 2, 3, 4]
    names = ['bei_men_chui_xue', 'qi_niu_yun']
     
    numbers = map(lambda value: value + 1, numbers)
    students = map(lambda value: value.upper(), names)
     
    print(list(numbers))
    print(list(students))
    

    reduce

    减少函数(连续计算,处理函数中第一个值是上一次函数执行的返回结果,第二个值是依次从迭代对象中的值,传递完则返回最后函数执行的结果)

    from random import randint
    from functools import reduce
     
     
    numbers = [randint(-10, 10) for _ in range(10)]
    print(numbers)
    print(sum(numbers))
    numbers_sum = reduce(lambda one, two: one + two, numbers)
    print(numbers_sum)
    

    filter

    依次依顺序把可迭代对象传入一个函数,获取函数返回为True的值,变成生成器

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333 
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    from random import randint 
     
    numbers = [randint(-10, 10) for _ in range(10)]
    print(numbers)
     
    # 取大于等于0 的整数
    result = filter(lambda value: value >= 0, numbers)
    print(list(result))
    

    闭包

    函数 + 环境变量(放在上层函数, 上层函数没有任何参数,则不能形成闭包) (不再受外层函数之外的任何参数影响)

    闭包架构 函数内再定义一个函数,外层函数返回内层函数名,内层函数需要引用外层函数变量

    闭包意义:函数调用的现场(上层函数的变量)保存了起来, 通过 nonlocal 声明不是当前函数局部变量,进行现场变量的修改

    闭包是装饰器实现的原理,所有的闭包问题都可以通过面向对象类的方式解决,选择简单实现的额方法

    def is_jpg(name):
        """判断文件的后缀名是是不是jpg,如果不是则添加上jpg"""
        def wrapper(filename):
            if filename.endswith(name):
                return filename
            else:
                return filename + name
        return wrapper
     
     
    if __name__ == '__main__':
        f = is_jpg('.jpg')
        print(f('beimenchuixue.txt'))
        print(f('beimenchuixue.jpg'))
    

    总结:

    1. 三元运算符其实本质上是if分支的简写逻辑

    2. 经常使用的是命令是编程,命令式编程包含流程控制、函数、分支、循环,函数式编程包括map reduce filter lambda,理论上可以替换所有命令式编程

    3. 命令式编程可以使用函数式编程简化代码逻辑

    4. 函数闭包,本质上保留了上层函数的变量

    相关文章

      网友评论

        本文标题:Python函数式编程:map reduce filter la

        本文链接:https://www.haomeiwen.com/subject/gfycuhtx.html