map 魔法 reduce魔法

来源:互联网 发布:淘宝枪模型可以打 编辑:程序博客网 时间:2024/04/24 18:31
  1.  def f(x):
    ...     return x * x
    ...
    >>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> list(r)
    [1, 4, 9, 16, 25, 36, 49, 64, 81]
    map()传入的第一个参数是f,即函数对象本身。由于结果r是一个Iterator,Iterator是惰性序列,因此通过list()函数让它把整个序列都计算出来并返回一个list。


    你可能会想,不需要map()函数,写一个循环,也可以计算出结果:


    L = []
    for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
        L.append(f(n))
    print(L)
    的确可以,但是,从上面的循环代码,能一眼看明白“把f(x)作用在list的每一个元素并把结果生成一个新的list”吗?map函数相当于人体加工厂,把每一个小孩(原list)透过黑魔法(f()函数),念出神奇咒语,变成了大人(新的List)。不要太神奇啊


    所以,map()作为高阶函数,事实上它把运算规则抽象了,因此,我们不但可以计算简单的f(x)=x2,还可以计算任意复杂的函数,比如,把这个list所有数字转为字符串:


    >>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
    ['1', '2', '3', '4', '5', '6', '7', '8', '9']
  2. reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)    ;   这是一个奇怪的机器(f()),它一次必须施法两个跟在后面鱼塘(list)里的两头飞猪,然后鱼塘里飞猪排着队让其施法加工成牛排。
  3. 注:map 函数和reduce函数最重要的是里面的函数,这是他们神奇的地方!
0 0
原创粉丝点击