一、概述

map操作是函数式编程中的重要技术之一,其作用就是对一个集合中的每个元素做处理,生成一个新的元素,由这些新的元素组成一个新的集合的返回。

所以map操作后,产生的新集合的元素个数和原集合的元素个数相同,但里面的元素值不一样,元素值对应的类型也可以和原来的不一样。

python通过内置的map函数也很好的支持了map操作。

map函数的语法格式为:map(functioniterable...)

二、案例

1、对集合iterable中的每一个元素应用‘function’方法,返回一个新的元素,如:

>>> def double(a):
... return a*2
...
>>> map(double,range(5))
[0, 2, 4, 6, 8]

上面代码先定义了一个double函数,传递给map,range(5)返回一个列表[0,1,2,3,4],经map处理后,返回一个新的列表。

>>> arr = ['Mary ', 'had', 'a', 'little ', 'lamb']
>>> def strlen(a):
... return len(a)
...
>>> map(strlen,arr)
[5, 3, 1, 7, 4]

上面代码定义了一个strlen方法,用于计算字符串的长度。传给map后,返回一个列表,可以看出列表中的元素类型和原列表不一样。但两个列表的长度是一样的。

2、如果给出了多个集合参数,则要求function也必须带多个参数,如:

>>> def fun(a,b):
... return a*100+b
...
>>> map(fun,[1,2],[3,4])
[103, 204]

可以看出,是会平行的取每个集合中的元素来处理。
注意,如果某个集合的元素个数少于其它的集合的元素个数,则不足的会被扩充为None,但是否会出问题取决于fun中的运算方式。

3、如果function为None,对于单个集合返回一个同样的,但对于多个集合,返回一个集合(集合中每个元素为元组)。如:

>>> arr = [1,2,3]
>>> newarr = map(None,arr)
>>> print arr
[1, 2, 3]
>>> print newarr
[1, 2, 3]
>>> del newarr[:]
>>> print newarr
[]
>>> print arr
[1, 2, 3]

从上面代码可以看出,即使是返回同样的集合,map操作返回的是一个新的集合。

>>> map(None,[1,2,3],['a','b'])
[(1, 'a'), (2, 'b'), (3, None)]

从上面代码可以看出,返回的集合中元素是元组,长度不足的集合的元素以None替代。

三、lambda 表达式在map函数中的使用

在python中, lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数

如:

>>> map(lambda x:pow(x,2),[1,2,3])
[1, 4, 9]

上面的lambda x : pow(x,2)  定义了一个函数,相当于

def fun(x):
return pow(x,2)

上面的map操作就等同  map(fun,[1,2,3] )

但使用lambda的好处是,省去了函数定义,这个场景还是很常见的,有很多时候,只需要能完成某个处理的函数,但具体名字无所谓,这时lambda就有用场了。这还避免了命名空间的污染,因为多个名字,就多了一分冲突的的可能。

再看一个有多个集合参数的例子

>>> map(lambda x,y:x+y,[1,2,3],[4,5,6])
[5, 7, 9]

四、总结

使用Map函数,可以让我们编写代码时把精力集中中如何转换元素上,不用关心集合的边界,不用关心新集合的创建等。这正是函数式编程的优势和典型特点所在。

下面通过例子来说明

Python函数式编程:内置函数map()使用说明的更多相关文章

  1. 跟着ALEX 学python day3集合 文件操作 函数和函数式编程 内置函数

    声明 : 文档内容学习于 http://www.cnblogs.com/xiaozhiqi/  一. 集合 集合是一个无序的,不重复的数据组合,主要作用如下 1.去重 把一个列表变成集合 ,就自动去重 ...

  2. Python基础编程 内置函数

    内置函数 内置函数(一定记住并且精通) print()屏幕输出 int():pass str():pass bool():pass set(): pass list() 将一个可迭代对象转换成列表 t ...

  3. [python基础知识]python内置函数map/reduce/filter

    python内置函数map/reduce/filter 这三个函数用的顺手了,很cool. filter()函数:filter函数相当于过滤,调用一个bool_func(只返回bool类型数据的方法) ...

  4. python学习交流 - 内置函数使用方法和应用举例

    内置函数 python提供了68个内置函数,在使用过程中用户不再需要定义函数来实现内置函数支持的功能.更重要的是内置函数的算法是经过python作者优化的,并且部分是使用c语言实现,通常来说使用内置函 ...

  5. python常用的内置函数哈哈

    python常用的内置函数集合做一个归类用的时候可以查找 abs 返回数字x的绝对值或者x的摸 all (iterable)对于可迭代的对象iterable中所有元素x都有bool(x)为true,就 ...

  6. python常用的内置函数

    python常用的内置函数集合做一个归类用的时候可以查找- abs 返回数字x的绝对值或者x的摸 - all (iterable)对于可迭代的对象iterable中所有元素x都有bool(x)为tru ...

  7. 十六. Python基础(16)--内置函数-2

    十六. Python基础(16)--内置函数-2 1 ● 内置函数format() Convert a value to a "formatted" representation. ...

  8. 十五. Python基础(15)--内置函数-1

    十五. Python基础(15)--内置函数-1 1 ● eval(), exec(), compile() 执行字符串数据类型的python代码 检测#import os 'import' in c ...

  9. python 常见的内置函数

    内置函数 接下来,我们就一起来看看python里的内置函数.截止到python版本3.6.2,现在python一共为我们提供了68个内置函数.它们就是python提供给你直接可以拿来使用的所有函数.这 ...

随机推荐

  1. 高频(工作频率为13.56MHz)

    在该频率的感应器不再需要线圈进行绕制,可以通过腐蚀活着印刷的方式制作天线.感应器一般通过负载调制的方式 的方式进行工作.也就是通过感应器上的负载电阻的接通和断开促使读写器天线上的电压发生变化,实现用远 ...

  2. Codecs是以plugin的形式被调用的(显示中文的codec plugin文件是qcncodecs4.dll),可静态载入和动态载入

    作为非英语国家人员开发的类库,QT有充分的理由优先考虑支持Unicode和各国自定义字库编码.大家也知道了QT对软件Internationalization有一套完整的开发模型,包括专门为此写的lin ...

  3. HDOJ 1003 Max Sum(线性dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1003 思路分析:该问题为最大连续子段和问题,使用动态规划求解: 1)最优子结构:假设数组为A[0, 1 ...

  4. projecteuler---->problem=8----Largest product in a series

    title: The four adjacent digits in the 1000-digit number that have the greatest product are 9 9 8 9 ...

  5. poj 2411 Mondriaan's Dream 轮廓线dp

    题目链接: http://poj.org/problem?id=2411 题目意思: 给一个n*m的矩形区域,将1*2和2*1的小矩形填满方格,问一共有多少种填法. 解题思路: 用轮廓线可以过. 对每 ...

  6. js超简单日历

    用原生js写了一个超级简单的日历.当做是练习js中的Date类型. 思路: 获取某个日期,根据年份计算出每个月的天数. 利用Date中的getDay()知道该月份的第一天为星期几. 循环创建表格,显示 ...

  7. 关闭Outlook的时候使之最小化

    Outlook很搓的一点就是只有按‘最小化’按钮的时候才会最小化到托盘,而按‘关闭’按钮Outlook直接被关闭退出.然后经常发现没邮件,结果是因为客户端关掉了. 下面通过插件方式实现关闭后最小化到托 ...

  8. linux c: 静态库和动态库的生成和使用

    场景: main函数需要两个接口,一个求和函数,一个打印函数. int sum(int i, int j); 求两个int数字的和. void show(int i, char* name); 打印i ...

  9. HTML5 总结-表单-表单元素

    HTML5 表单元素 HTML5 的新的表单元素: HTML5 拥有若干涉及表单的元素和属性. 本章介绍以下新的表单元素: datalist keygen output 浏览器支持 Input typ ...

  10. @RequestParam

    @MVC另外一个特性是其提取和解析请求参数的能力.让我们继续重构上面的方法,并在其中添加@RequestParam注解: @RequestMapping("/accounts/show&qu ...