码迷,mamicode.com
首页 > 编程语言 > 详细

Python函数式编程,map/reduce,filter和sorted

时间:2017-10-02 17:16:41      阅读:278      评论:0      收藏:0      [点我收藏+]

标签:特征   https   序列   地址   ble   操作   问题   重要   全局   

什么是函数式编程?

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

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

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

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

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

 

map/reduce

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

def abs(x):
        if x > 0:
                 return x
        return -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 + y

a = reduce(add,[1,2,3,4,5])
>>>a
15

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

from functools import reduce

def tra(x,y):
    return x*10 + y

a = reduce(tra,(1,2,3,4,5))
>>>a
12345

map()和reduce()配合使用

from functools import reduce

def sq(x):
    return x * x 

def add(y,z):
    return y + z

a = 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,在内存中指向同一个地址
要使用切片操作,才能得到新的副本

Python函数式编程,map/reduce,filter和sorted

标签:特征   https   序列   地址   ble   操作   问题   重要   全局   

原文地址:http://www.cnblogs.com/mzc1997/p/7613054.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!