###函数式编程

函数式编程(Functional Programming)或者函数程序设计,又称泛函编程,是一种编程范型,它将计算机运算视为数学上的函数计算,并且避免使用程序状态以及易变对象。简单来讲,函数式编程是一种“广播式”的编程,一般结合前面提到过的lambda定义函数,用于科学计算中,会显得特别简洁方便。

在Python中,函数式编程主要由几个函数的使用构成:lambda()、map()、reduce()、filter(),zip()。

###列表解析
列表解析在python中能够简化我们对列表内元素逐一进行操作的代码,也称列表推导式,可以替代函数简化表达。

具体例子:

a = [1, 2, 3,4,5]
b = []
for i in a:
b.append(i *2)

使用列表解析表示方式:

a = [1, 2, 3,4,5]
b = [i*2 for i in a]

从上面的式子来看,列表解析的表达比for循环要来得简洁。

###lambda()函数
lambda是Python支持一种有趣的语法,它允许你快速定义单行的最小函数,类似与C语言中的宏,可以用在任何需要函数。

f = lambda x: x * 2
f(3)
#结果为6

###map()函数

先定义一个函数,然后再用map()命令将函数逐一应用到(map)列表中的每个元素,最后返回一个数组。map()命令也接受多参数的函数,

map函数格式为map(function,sequence)

把sequence中的值当参数逐个传给function,返回一个包含函数执行结果的list。

如果function有两个参数,即map(function,sequence1,sequence2)。

如map(lambda x,y:x*y,a,b)表示将a、b两个列表的元素对应相乘,把结果返回给新列表。

假设有一个列表a=[1,2,3],要给列表中的每个元素都加2得到一个新列表

b = map(lambda x: x+2, a)
b = list(b) 
#结果是[3, 4, 5]

有了列表解析,为什么还要有map()命令呢?

其实列表解析虽然代码简短,但是本质上还是for命令,而Python的for命令效率并不高,而map()函数实现了相同的功能,并且效率更高,原则上来说,它的循环命令速度相当于C语言。

###reduce()函数

reduce()函数。它有点像map()函数,但map()函数用于逐一遍历,而是reduce()函数用于递归计算。

reduce函数格式为reduce(function,sequence)

function接收的参数个数只能为2

先把sequence中第一个值和第二个值当参数传给function,再把function的返回值和第三个值当参数传给

function,然后只返回一个结果。

具体例子如下

s = 1
for i in range(1, 5):
s = s * i

上面是一个1到4的阶乘,如果换成reduce函数可以简化为:

reduce(lambda x,y: x*y, range(1, 5))

其中,lambda x,y:x*y构造了一个二元函数,返回两个参数的乘积。reduce命令首先将列表的前两个元素作为函数的参数进行运算,然后将运算结果与第三个数字作为函数的参数,然后再将运算结果与第四个数字作为函数的参数……依此递推,直到列表结束,返回最终结果。

###filter()函数

filter()函数。顾名思义,它是一个过滤器,用来筛选出列表中符合条件的元素。

filter函数格式为filter(function,sequence)

function的返回值只能是True或False

把sequence中的值逐个当参数传给function,如果function(x)的返回值是True,就把x加到filter的返回值里面。

具体例子如下:

b=[]
for i in range(10):
if i >3 and <6:
b.append(i)

使用filte()函数实现以上目的的语句如下:

b=filter(lambda x:x>3 and x<6 ,range(10))
b=list(b)

整体上比for循环要简洁不是,而且速度上要比循环来得快。

###zip()函数

返回一个元祖列表,该元祖按顺序包含每个序列的相应元素,以最小的一个为准。

zip函数格式为zip(sequence1,sequence2,..)

具体例子如下:

a=[1,2,3]
b=[5,6] for i,j in zip(a,b):
print(i,j) #结果为(1,5) (2,6)

在python中,把很多内置函数结合起来使用,可以使用很少的代码来实现很多复杂的功能,结合匿名函数,列表解析一起使用,功能更加强大.使用内置函数最显而易见的好处是:

速度快,使用内置函数,比普通的PYTHON实现,速度要快一倍左右,还有就是代码简洁。

python中lambda,map,reduce,filter,zip函数的更多相关文章

  1. day17—max, map, reduce, filter, zip 函数的使用

    一.max 函数 l=[3,2,100,999,213,1111,31121,333] print(max(l)) # dic={'k1':10,'k2':100,'k3':30} print(max ...

  2. python 中的map(), reduce(), filter

    据说是函数式编程的一个函数(然后也有人tucao py不太适合干这个),在我看来算是pythonic的一种写法. 简化了我们的操作,比方我们想将list中的数字都加1,最基本的可能是编写一个函数: I ...

  3. python 函数式编程之lambda( ), map( ), reduce( ), filter( )

    lambda( ), map( ), reduce( ), filter( ) 1. lambda( )主要用于“行内函数”: f = lambda x : x + 2 #定义函数f(x)=x+2 g ...

  4. Python map/reduce/filter/sorted函数以及匿名函数

    1. map() 函数的功能: map(f, [x1,x2,x3]) = [f(x1), f(x2), f(x3)] def f(x): return x*x a = map(f, [1, 2, 3, ...

  5. Python学习:函数式编程(lambda, map() ,reduce() ,filter())

    1. lambda: Python 支持用lambda对简单的功能定义“行内函数” 2.map() : 3.reduce() : 4.filter() : map() ,reduce() , filt ...

  6. Python中的Map/Reduce

    MapReduce是一种函数式编程模型,用于大规模数据集(大于1TB)的并行运算.概念"Map(映射)"和"Reduce(归约)",是它们的主要思想,都是从函数 ...

  7. python中的map、filter、reduce函数

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

  8. python中lambda以及与filter/map/reduce结合的用法

    一.lambda函数即匿名函数,和普通的函数相比,就是省去了函数名称而已: lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边是函数体的返回值 g = lambda x,y : x+y ...

  9. python中 Lambda,Map,Filter,Itertools,Generator高级函数的用法

    Lambda 函数 Lambda 函数是一种比较小的匿名函数--匿名是指它实际上没有函数名. Python 函数通常使用 def a_function_name() 样式来定义,但对于 lambda ...

随机推荐

  1. cxgrid的ImageComboBox属性学习

    1.点击Items设置右边有三个点按钮 2.Images属性绑定imagelist控件 3.点击Items即可选择显示的图片和文字 4.设置CxlookupcomboBox的高度 AutoSize设置 ...

  2. Oracle数据表转换为Shapefile(二)

    在上一篇博文<Oracle数据表转换为Shapefile(一)>中详细描述了一种基于Oracle数据表生产Shapefile的技术方法,本文同样以详细图解的方式描述一种更便捷的方法来完成同 ...

  3. Android 画指南针

    1.无意看到了一个指南针的UI,在这里简单的模仿了一下.其实就是第画布的一些变化而已. 别人的效果图是: 3.简单说一下思路: 1)首先是画一个黑色圆盘 2) 然后画圆盘上的刻度(就是对Canvas一 ...

  4. leetcode 存在重复元素

    给定一个整数数组,判断是否存在重复元素. 如果任何值在数组中出现至少两次,函数返回 true.如果数组中每个元素都不相同,则返回 false. 示例 1: 输入: [1,2,3,1] 输出: true ...

  5. python3.7.0安装

    如何安装Python的操作步骤: 1.第一步先去python的官方网站下载python的安装包 地址:https://www.python.org/downloads/ 根据自己的系统选择对应的安装包 ...

  6. 动态生成select框内容

    获取动态数据,显示在select选项中,当前select在jsp页面中 <select > <option>这里放选中或者当前的数据</option> <%f ...

  7. yaml 配置

    yaml文件的作用 yaml是一种直观的能够被电脑识别的的数据序列化格式,容易被人类阅读,并且容易和脚本语言交互. yaml的语法规则 字母大小写敏感: 通过缩进来表示层级关系,同层级元素需左对齐,且 ...

  8. “全栈2019”Java第九章:解释第一个程序

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. swift 的基本类型之字符串

    一:创建字符串 //字符串的创建有两种 //不可变字符串 let str = "I'm a string" //可变字符串 var string = "I'm a mut ...

  10. Java Builder 模式,你搞懂了么?

    加油.png 前言:最近闲来无事的时候想着看看一些平常用的三方库源码,没想到看了之后才知道直接撸源码好伤身体,一般设计优秀的开源库都会涉及很多的设计模式,就比如 android 开发使用频繁的 okH ...