• 函数式编程


    一、定义:

    1、编程的方法论:

    面向过程、面向对象、函数式

    高阶函数:

    ① 函数接受的参数是一个函数名

    ② 返回值中包含函数名

    2、函数式编程:函数式=编程语言定义的函数+数学意义的函数

    函数式就是用编程语言去实现数学函数。这种函数内对象是永恒不变的,要么参数是函数,要么返回值是函数,没有for和while循环,所有的循环都用递归去实现,无变量的赋值(即不用变量去保存状态),无赋值即不改变。

    3、特性

    ① 不可变数据:不用变量保存状态,不修改变量

    ② 第一类对象:函数即“变量” 

    ③ 尾调用优化(尾递归):在函数的最后一部调用另外一个函数(最后一行不一定是函数的最后一步)

    4、实例

    #把函数当作参数传入到另外一个函数中

    def foo(n):
        print(n)
    def bar(name):
        print('my name is %s'%name)
    foo(bar('alex'))

    输出结果:

    my name is alex
    None

    二、高阶函数

    1、 map函数:map(function, iterable, ...)

    意义:根据提供的函数对指定序列做映射。

    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

    lum = [1,5,6,11,20]
    li = []
    #非map用法
    def test(x,y):
        for i in y:
            k = x(i)
            li.append(k)
        return li
    print(test(lambda x:x**2 ,lum))
    
    #map函数用法
    def square(x):
        return x**2
    print(list(map(square,lum))) #转化为列表形式

    输出结果:

    [1, 25, 36, 121, 400]
    [1, 25, 36, 121, 400]

    最精简样式,输出结果与上面一致:

    print(list(map(lambda x:x**2,[1,5,6,11,20])))

    2、filter() 函数:filter(function, iterable)

    意义:用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。

    第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

    def test(x):
        return x%2 == 0
    li = filter(test,[1,2,3,46,55,64,87,99])
    print(list(li))

    输出结果:[2, 46, 64]

    3、reduce() 函数:reduce(function, iterable[, initializer])

    意义:对参数序列中元素进行累积

    函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果

    from functools import reduce #调用reduce功能
    print(reduce(lambda x,y:x*y,[1,2,45,4]))

    输出结果:360

    小结:

    map()函数:处理序列中的每个元素,得到的结果是一个列表,该列表元素个数及位置与原来一样

    filter()函数:遍历序列中的每个元素,判断每个元素得到布尔值,如果是Ture则留下来

    reduce()函数:处理一个序列,然后把序列进行合并操作

  • 相关阅读:
    深入分析 Python 的垃圾回收机制
    9.26
    Web安全之ML--构建机器学习工具箱
    第八节--图的数据结构及其算法
    第七节--树形结构及其算法
    第六节--堆栈与队列算法
    第四节--查找与哈希算法
    第三节--排序算法
    第二节--常用数据结构
    第一节--走入算法的世界
  • 原文地址:https://www.cnblogs.com/lishuangtu/p/8945443.html
Copyright © 2020-2023  润新知