什么是函数式编程?

  • 与面向对象编程(Object-oriented programming)和过程式编程(Procedural programming)并列的编程范式。
  • 最主要的特征是,函数是第一等公民,可以定义在函数内外,作为函数参数或返回值,函数的组合。
  • 强调将计算过程分解成可复用的函数,典型例子就是map方法和reduce方法组合而成 MapReduce 算法。
  • 只有纯的、没有副作用的函数,才是合格的函数。

知乎-什么是函数式编程思维?

函数式编程与命令式编程最大的不同其实在于:

函数式编程关心数据的映射,命令式编程关心解决问题的步骤。

所以函数式编程最重要的是数据的映射,要用数学的思维去解决问题,而不是计算机指令。

map/reduce

map()函数接受一个函数,一个或多个可迭代对象,函数作用于迭代对象的每一个元素上并以迭代器返回。

def abs(x):if x > 0:return xreturn -x#map()返回迭代器,惰性,需要list转化一下
a = list(map(abs,[-1,-6,7,10]))
>>>a
[1,6,7,10]

####求两个list元素的对应乘积返回list def sub(x,y):       return x * y  a = list(map(sub,[1,2,3],[4,5,6]))  >>>a  [4,10,18]

reduce

Python3已经将reduce()从全局移除,要使用需要从函数与工具导入

>>>from functools import reduce

reduce函数接受的函数必须有两个参数,另一个为list或tuple

从元素开始取两个元素做积累运算

from funtools import reduce
def add(x,y):return x + ya = reduce(add,[1,2,3,4,5])
>>>a
15

还可以将list或者tuple转化为整数

from functools import reducedef tra(x,y):return x*10 + ya = reduce(tra,(1,2,3,4,5))
>>>a
12345

map()和reduce()配合使用

from functools import reducedef sq(x):return x * x def add(y,z):return y + za = reduce(add,map(sq,[1,2,3]))
>>>a
14

filter过滤器

filter()接受一个函数,一个序列,函数依次作用在每个元素上,保留Ture丢弃FALSE

###只保留正数def filt(x):if x > 0:return x
#filter返回迭代器,惰性,需要list转换一下
a = list(map(filt,[-1,-2,3,4]))>>>a
[3,4]

sorted

sorted(iterable, key=None, reverse=False)

sorted()函数也是一个高阶函数,key可以接受一个函数作用在每个元素上返回

sorted([2,4,1,3,7])
[1,2,3,4,7]#key接受函数>>>sorted([1,-5,3,-6],key=abs)
[-6,-5,1,3]

#可以传入第三参数reverse=Ture,默认正序为FALSE实现倒序排序>>>sorted([1,3,5,7,9]reverse=Ture)[9,7,5,3,1]

######sort函数a = [1,0,3,5,4]a.sort()>>>print(a)[0,1,3,4,5]#倒序a = [1,0,3,5,4]a.sort(reverse = True)>>>print(a)[5,4,3,1,0]如果需要一个list副本,不要使用赋值方法,这样得到的副本还是原来的list,在内存中指向同一个地址要使用切片操作,才能得到新的副本

转载于:https://www.cnblogs.com/mzc1997/p/7613054.html

Python函数式编程,map/reduce,filter和sorted相关推荐

  1. Python函数式编程-map/reduce

    1.map map()传入的第一个参数是f,即函数对象本身. map()函数接收两个参数,一个是函数,一个是Interable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterat ...

  2. Python函数式编程——map()、reduce()

    提起map和reduce想必大家并不陌生,Google公司2003年提出了一个名为MapReduce的编程模型[1],用于处理大规模海量数据,并在之后广泛的应用于Google的各项应用中,2006年A ...

  3. python map reduce filter_Python map, reduce, filter和sorted

    map map(funcname, list) python的map 函数使得函数能直接以list的每个元素作为参数传递到funcname中, 并返回响应的新的list 如下: def sq(x): ...

  4. Python map, reduce, filter和sorted

    map map(funcname, list) python的map 函数使得函数能直接以list的每个元素作为参数传递到funcname中, 并返回响应的新的list 如下: def sq(x):r ...

  5. python中sorted函数的用法_Python中map,reduce,filter和sorted函数的使用方法

    map map(funcname, list) python的map 函数使得函数能直接以list的每个元素作为参数传递到funcname中, 并返回响应的新的list 如下: def sq(x): ...

  6. Python 函数式编程Map、Reduce

    在函数式语言里,map表示对一个列表(List)中的每个元素做计算,reduce表示对一个列表中的每个元素做迭代计算.它们具体的计算是通过传入的函数来实现的,map和reduce提供的是计算的框架. ...

  7. 函数式编程Map()Reduce()

    1.forEach():每个元素都调用指定函数,可传三个参数:数组元素丶元素索引丶数组本身丶var a = [1, 2, 3, 4, 5, 6, 7, 8]; a.forEach(function(v ...

  8. py函数式编程(高阶函数map/reduce/filter/sorted、闭包函数/返回函数、匿名函数lamber、@装饰器decorator、偏函数functool.partial())

    #py函数式编程.py #高阶函数map/reduce/filter/sorted.闭包函数/返回函数.匿名函数lamber.@装饰器decorator.偏函数functool.partial()# ...

  9. Python函数式编程-map()、zip()、filter()、reduce()、lambda()

    三个函数比较类似,都是应用于序列的内置函数.常见的序列包括list.tuple.str map函数 map函数会根据提供的函数对指定序列做映射. map函数的定义: map(function, seq ...

最新文章

  1. 清华成立视觉智能研究中心,邓志东任中心主任
  2. Atitit .linux 取回root 密码q99
  3. 运维一定要懂的100个网络安全小知识
  4. 被遗忘和庸俗化的弗洛伊德:纪念弗洛伊德诞辰150周年(全文)
  5. 2018.3.30 边框应用与导航栏设置
  6. CSS:hover伪类使用
  7. C/C++ 进程间通信 管道
  8. 首届电子商务AI算法大赛 Organized by automlai
  9. Sql Prompt安装图文教程
  10. 计算机网络机房巡视表,机房巡查记录表.doc
  11. nbu 7.5备份oracle,NBU7.5备份oracle
  12. duilib菜单动态添加
  13. 服务器下安装windows操作系统---宝德服务器
  14. 第六章代码的问题——基于DirectX11的3D图形程序设计案例教程——重庆大学出版社
  15. 使用PHP获取图像文件的EXIF信息
  16. c语言课程设计 雪花飘落,c雪花飘落课程设计.doc
  17. IOS生物信息验证(Touch IDFace ID)
  18. ppm调制matlab程序,求助:谁能帮我编写一个4ppm的解调程序 谢谢了
  19. c语言难学吗?怎么学C语言?
  20. 数据挖掘时功能和一个聚类分析应用案例

热门文章

  1. android 中xml解析方式
  2. javaWeb项目中web.xml的xsd( XML Schemas Definition)文件
  3. c/c++函数指针(3)
  4. WCF我应该再深入一些
  5. windows和linux的共享
  6. VC98\mfc\lib' specified in 'LIB environment variable' 系统找不到指定路径
  7. [ILINK32 Error] Error: Unresolved external 'WSAIoctl'
  8. Spring源码学习笔记:经典设计模式之代理模式
  9. LeetCode 513. Find Bottom Left Tree Value
  10. 1031. Hello World for U (20)-PAT甲级真题