Python函数式编程:内置函数map()使用说明
2016-04-26 20:13
393 查看
一、概述
map操作是函数式编程中的重要技术之一,其作用就是对一个集合中的每个元素做处理,生成一个新的元素,由这些新的元素组成一个新的集合的返回。
所以map操作后,产生的新集合的元素个数和原集合的元素个数相同,但里面的元素值不一样,元素值对应的类型也可以和原来的不一样。
python通过内置的map函数也很好的支持了map操作。
map函数的语法格式为:map(function, iterable, ...)
二、案例
1、对集合iterable中的每一个元素应用‘function’方法,返回一个新的元素,如:
上面代码先定义了一个double函数,传递给map,range(5)返回一个列表[0,1,2,3,4],经map处理后,返回一个新的列表。
上面代码定义了一个strlen方法,用于计算字符串的长度。传给map后,返回一个列表,可以看出列表中的元素类型和原列表不一样。但两个列表的长度是一样的。
2、如果给出了多个集合参数,则要求function也必须带多个参数,如:
可以看出,是会平行的取每个集合中的元素来处理。
注意,如果某个集合的元素个数少于其它的集合的元素个数,则不足的会被扩充为None,但是否会出问题取决于fun中的运算方式。
3、如果function为None,对于单个集合返回一个同样的,但对于多个集合,返回一个集合(集合中每个元素为元组)。如:
从上面代码可以看出,即使是返回同样的集合,map操作返回的是一个新的集合。
从上面代码可以看出,返回的集合中元素是元组,长度不足的集合的元素以None替代。
三、lambda 表达式在map函数中的使用
在python中, lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
如:
上面的lambda x : pow(x,2) 定义了一个函数,相当于
上面的map操作就等同 map(fun,[1,2,3] )
但使用lambda的好处是,省去了函数定义,这个场景还是很常见的,有很多时候,只需要能完成某个处理的函数,但具体名字无所谓,这时lambda就有用场了。这还避免了命名空间的污染,因为多个名字,就多了一分冲突的的可能。
再看一个有多个集合参数的例子
四、总结
使用Map函数,可以让我们编写代码时把精力集中中如何转换元素上,不用关心集合的边界,不用关心新集合的创建等。这正是函数式编程的优势和典型特点所在。
下面通过例子来说明
map操作是函数式编程中的重要技术之一,其作用就是对一个集合中的每个元素做处理,生成一个新的元素,由这些新的元素组成一个新的集合的返回。
所以map操作后,产生的新集合的元素个数和原集合的元素个数相同,但里面的元素值不一样,元素值对应的类型也可以和原来的不一样。
python通过内置的map函数也很好的支持了map操作。
map函数的语法格式为:map(function, iterable, ...)
二、案例
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字符串的编码与解码(encode与decode)
- virtualenv --创建Python虚拟环境
- Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结
- python学习之旅之python环境的配置
- python 文件编码转换 从vs下的默认编码到utf-8
- Python 没有多态
- 20160426 Python视频教程
- 为什么 Python 不支持函数重载?
- python遍历数组的两种方法
- Python 内置函数 range的使用
- Python数据分析学习笔记一
- Python 静态成员
- python 批量下载文件
- 在mac上搭建python环境
- python逆序切片
- Python核心编程 第六章练习
- 《python+opencv实践》一、基于颜色的物体追踪(上)
- python爬虫学习--pixiv爬虫(4)--代码优化
- python import 缺少解决方案
- python learning----顺序查找和二分法