zoukankan      html  css  js  c++  java
  • Python函数式编程:内置函数map()使用说明

    一、概述

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

       

    下面通过例子来说明

  • 相关阅读:
    开始学习编写用于 Windows SideShow 设备的小工具【转】
    Windows Mobile 6.5 Developer Tool Kit 下载
    Microsoft Security Essentials 微软免费杀毒软件下载
    SQL Server 2008 空间数据存储摘抄(SRID 点 MultiPoint LineString MultiLineString 多边形 MultiPolygon GeometryCollection)
    Vista Sidebar Gadget (侧边栏小工具)开发教程 (2)
    Vista Sidebar Gadget (侧边栏小工具)开发教程 (4)
    负载测试、压力测试和性能测试的异同
    Windows Server 2008 Vista Sidebar Gadget (侧边栏小工具) 入门开发实例
    Silverlight Tools 安装失败 解决办法
    SQL Server 2008 空间数据库 空间索引概念及创建(取自帮助)
  • 原文地址:https://www.cnblogs.com/51kata/p/5436439.html
Copyright © 2011-2022 走看看