reduce()之js与python

最近在自学python基础,发现很多js中的内置函数python中都存在,甚至比js更加简洁,下面说一下reduce()在js和python中的用法,做个对比便于记忆。

reduce()简介:

  reduce的原意为减少,缩小;在js中为数组的内置方法,在python中则是一个内置方法,可以对可迭代数据集合做处理。

js中的reduce:

reduce为数组中的每一个元素依次执行callback函数,不包括数组中被删除或从未被赋值的元素

语法:

  因为js中reduce为数组的内置方法,所以使用时要与数组一起使用,即:

arr.reduce(function(accumulator,currentValue,index,array){
  ...
}, initialValue);

参数说明:

  第一个参数为回调函数function,包含四个参数:

    accumulator

    累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue(见于下方)。

    currentValue:

    数组中正在处理的元素。

    index:(可选)

    数组中正在处理的当前元素的索引。 如果提供了initialValue,则起始索引号为0,否则从索引1起始。

    array:(可选)

    调用reduce()的数组

  第二个参数为初始值:

  initialValue(可选)

 返回值:

   函数累计处理的结果

注意:回调函数第一次执行时,accumulator 和currentValue的取值有两种情况:

  1)如果调用reduce()时提供了initialValueaccumulator取值为initialValuecurrentValue取数组中的第一个值;

  2)如果没有提供 initialValue,那么accumulator取数组中的第一个值,currentValue取数组中的第二个值。

如果数组为空且没有提供initialValue,会抛出TypeError 。

如果数组仅有一个元素(无论位置如何)并且没有提供initialValue, 或者有提供initialValue但是数组为空,那么此唯一值将被返回并且callback不会被执行。

举例:

   

[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array){
  return accumulator + currentValue;
});

callback 被调用四次,每次调用的参数和返回值如下表:

reduce返回的值将是最后一次回调返回值(10)。

更详细的讲解请参考:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

 

python中的reduce():

描述:

  reduce() 函数会对参数序列中元素进行累积。

  函数将一个可迭代的数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

语法:

  python中的reduce可处理的数据不仅仅局限于列表,所有可迭代数据均在处理范围之内

reduce(function, iterable[, initializer])

参数:

  function:回调函数,有两个参数,与js的前两个参数相同

    accumulator

    累计器累计回调的返回值; 它是上一次调用回调时返回的累积值,或initialValue(见于下方)。

    currentValue:

    数组中正在处理的元素。

  iterable:

    可迭代对象:类比与js中的arr

  initializer:(可选)

     初始参数:类比于js中的第二个参数

举例:

  

>>>def add(x, y) :            # 两数相加
...     return x + y
... 
>>> reduce(add, [1,2,3,4,5])   # 计算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数
15
reduce(add, [1,2,3,4,5]) ==> add( add( add( add(1, 2), 3), 4), 5)

 

以上是js和python的reduce函数整理,可以看出其实很像,区别在于使用形式不同,不得不承认的是python使用起来更加简单并且可处理的数据类型更加多,

如果js想用reduce想用来处理其他可迭代对象可能要使用到call,apply之类的方法才行了

 

 

 

posted @ 2019-11-12 15:41  雨打芭蕉wt  阅读(298)  评论(0编辑  收藏  举报