美文网首页
函数式编程学习笔记

函数式编程学习笔记

作者: 喵小姐_王小木 | 来源:发表于2020-01-09 21:21 被阅读0次

一、命令式编程和函数式式编程的区别

命令式编程的主要思想是关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么。而函数式编程的思想是告诉计算机应该做什么,但不指定具体要怎么做。代码更加简洁、易理解、易维护、易并行。函数式编程最重要的特点是“函数第一位”,即函数可以出现在任何地方,比如可以把函数作为参数传递给另一函数,还可以将函数作为返回值。
尽管python算不上一门纯函数式编程语言,但它本身提供了很多函数式编程的特性,像map、reduce、filter这些函数都支持函数作为参数。

二、lambda表达式

lambda表达式在其他语言中被称为匿名函数。即函数没有具体的名称。比如普通函数用def创建的方法是有名称的,而lambda创建时没有名字,如果你不需要对一个函数使用两次,可以使用lambda表达式。

#普通函数
def add(a,b):
    return a + b
print add(2,3)

#匿名函数 冒号前是参数,可以有多个,用逗号隔开,冒号右边只能是表达式
add = lambda a,b : a + b
print add(2,3)

通过以上的例子,非常容易理解lambda简化了函数定义的书写格式,使代码更为简洁,但是使用普通函数的定义方式更为直观,易理解。

三、map()

一般用法是map(function, *iterables)。需要传入一个函数,这个函数可以是内置的,也可以是自己定义,也可以是匿名函数。
第二个参数是一个可迭代对象(可以传入多个),如列表,字符串等等,如果传入的多个迭代对象长度不一致,则按最短的长度进行处理。
返回的是一个map对象,注意不是列表不能直接输出,可以通过for循环或者list()来显示。

list_x=[1,3,4,5]
list_y=[1,5,6,7,8]
r=map(lambda x,y:x+y,list_x,list_y)
print(list(r))

四、reduce()

reduce()函数在库functools里,如果要使用它,要从这个库里导入。
一般用法是reduce(function, sequence[, initial])。需要传入一个函数,这个函数可以是内置的,也可以是自己定义,也可以是匿名函数,function参数是一个有两个参数的函数,reduce依次从sequence中取一个元素,和上一次调用function的结果做参数再次调用function。
第一次调用function时,如果提供initial参数,会以sequence中的第一个元素和initial作为参数调用function,否则会以序列sequence中的前两个元素做参数调用function。
reduce函数与map函数不一致的地方,map函数操作是并行操作,reduce函数是把多个参数合并的操作,也就是从多个条件简化的结果。

from functools import reduce
 list_z=[1,2,3,4,5,6]
 r=reduce(lambda z,z1:z+z1,list_z)
 print(R)

五、filter()

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
一般用法filter(function, iterable)第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

 list_f=[1,0,1,1,0]
 F=filter(lambda x:x,list_f)
 print(list(F))

相关文章

  • 函数式编程

    拉勾大前端的笔记,仅作为学习记录 课程介绍 为什么学习函数式编程,以及什么是函数编程 函数式编程的特性(纯函数,柯...

  • Scala 学习笔记

    Scala 学习笔记 1.函数式编程 函数式编程:函数式编程把函数当作一等公民,充分利用函数,支持函数的多种使用方...

  • Java 8函数式编程学习笔记

    Java 8函数式编程学习笔记 author:Gavin date:2018/11/09 什么是函数式编程 在思考...

  • 初入函数式编程

    真·函数式编程 学习函数式编程的学习笔记 禁用var/let,所有东西都用const定义,也就是说无变量,强制im...

  • 学习笔记

    学习笔记 函数式编程 函数式编程就是对运算过程的抽象,其中的函数是指数学中的函数即映射关系,相同的输入始终要得到相...

  • 2018-09-21

    java学习笔记(二) 前一篇简单的介绍了Java8函数式编程,这篇还将继续函数式编程之旅。 流 在Java程序中...

  • 理解函数式编程

    这篇文章是在学习函数式编程时的学习笔记,里面有很多自己对函数式编程的理解,有些理解可能不一定准确,希望对大家学习函...

  • 函数式编程

    为什么学习函数式编程 函数式编程随着react的流行受到越来越多的关注 vue3也开始拥抱函数式编程 函数式编程可...

  • 函数式编程

    1 文章目标 为什么要学习函数式编程以及什么是函数式编程 函数式编程的特性(纯函数、柯里化、函数组合等) 函数式编...

  • Python进阶语法——函数式编程、模块,面向对象

    一、 Python进阶学习 一、函数式编程 1.1函数式编程 1.2高阶函数 1.2.1 import mathd...

网友评论

      本文标题:函数式编程学习笔记

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