函数式编程基础---高阶函数和偏函数

一、高阶函数

  所谓高阶函数是指可一把函数作为参数,或者是可以将函数作为返回值的函数(我们见得闭包函数就是高阶函数)。

function foo(x){
   return function(){
        return x;
   }
}

  对于程序的编写,高阶函数比普通函数要灵活的多,除了通常意义的函数调用返回外,还形成了一种后续传递风格的结果接收方式,而非单一的返回值形式,后续传递风格的程序编写将函数的业务重点从返回值转移到了回调函数中:

function(x,bar){
   return bar(x);
}

  以上的代码为例,对于相同的foo()函数,传入的bar的参数不同,则可以得到不同的结果。结合Node提供的最基本的事件模块可以看到,事件的处理方式就是基于高阶函数的特性来完成的。

  高阶函数在JS中的应用比比皆是,其中ECMAScript5中提供的一些数组方法就是典型的高阶函数,比如:forEach()、map()、reduce()、reduceRight()、filter()、every()、some()等。

二、偏函数

  偏函数用法是指创建一个调用另一个部分——参数或变量已经预置的的函数——的函数的用法。(好拗口,我也不懂),先看看例子。

普通方法:var toString=object.prototype.toString;
var isString=function(obj){
    return toString.call(obj)==‘[object String]‘;
};

var isFunction=function(obj){
    return toString.call(obj)==‘[object Function]‘;
}; ..........

偏函数方法:
var isType=function(type){
     return function(obj){
          return tostring.call(obj)==‘[object ‘ + type+ ‘ ]‘;
     }
}

  上面的例子中,用偏函数方法去除了冗余代码,解决了重复定义的问题。这种通过指定部分参数来产生一个新制定的函数的形式就是偏函数。

  偏函数应用在异步编程中也十分常见,著名的类库Underscore提供的after()方法既是偏函数应用,其定义如下:

_.after=function(times,func){
   if(times<=0) return func();
   return function(){
      if(--times<1){return func.apply(this,arguments)};
   }
}

   这个函数可以根据传入的times参数和具体的方法,生成一个需要调用多次才能真正执行实际函数的函数。

时间: 2024-12-18 12:06:10

函数式编程基础---高阶函数和偏函数的相关文章

函数式编程和高阶函数

函数式编程 函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用.而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的. 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! Python对函数式编程提供部分支持.由于Python允许使用变量,因此,Python不是纯函数式编程语言. 一

Python基础笔记:函数式编程:高阶函数、返回函数、匿名函数、装饰器、偏函数

高阶函数 高阶函数:一个函数可以接收另一个函数作为参数 或 一个函数可以返回一个函数作为返回值,这种函数称之为高阶函数. #函数 add 接收 f 函数作为参数 >>> def add(x,y,f): ... return f(x)+f(y) ... >>> add(-5,6,abs) 11 可以把匿名函数作为返回值返回 #把匿名函数作为返回值返回 def build(x, y): return lambda: x * x + y * y 匿名函数 关键字 lambda

函数(作用域,匿名函数,函数式编程,高阶函数)

一.函数作用域 1.函数名表示的是内存地址 1 def test1(): 2 print('in the test1') 3 def test(): 4 print('in the test') 5 return test1 6 7 print(test()) 打印:in the test<function test1 at 0x000001E90E452EA0> 2.函数的作用域只跟函数声明时定义的作用域有关,跟函数的调用位置无任何关系 1 name = 'xiaopang' 2 def f

Python学习之路:函数式编程介绍&amp;高阶函数

函数式编程:一种抽象程度很高的范式,重要特点:输入是确定的,输出就是确定的: Python对函数式编程,部分支持: 高阶函数: def add(x,y,f):#函数本身传给函数,就是高阶函数 return f(x)+f(y) res = add(3,-6,abs) print(res)

python函数式编程之高阶函数学习

基本概念 函数式编程,是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量.因此,任意一个函数,只要输入确定,输出就确定的这种函数我们称之为纯函数,我们称这种函数没有副作用.而允许使用白变量的程序设计语言,由于函数内部的变量状态是不确定的,同样的输入可能有不同的输出,我们称这种函数为有副作用的. 函数式编程的一个特点就是,允许把函数本身作为参数传递给另一个函数,还允许返回一个函数! Python对函数式编程提供部分支持.由于Python允许使用变量,因此,Python不是纯函数式

python 函数式编程:高阶函数,map/reduce

1 #函数式编程 2 #函数式编程一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数 3 #(一)高阶函数 4 5 f=abs 6 f 7 print(f(-20)) 8 #结果 20 9 #函数可以赋值给一个变量,即:变量可以指向函数 10 #那么函数名是什么?函数名其实就是指向函数的变量! 11 12 #下面的代码,执行后,abs已经不指向求绝对值函数而是一个整数10了. 13 #后面的abs(-10)将报错,无法执行,必须重启python才可以. 14 #abs=10

Python3 函数式编程(高阶函数)

这一次主要是学习了一下Python3函数式编程思想,介绍了3个代表性高阶函数:map(), reduce(), filter().像 sorted() 其实也是高阶函数,可以接受函数作为参数.这篇学习笔记中编写了大量高阶函数,同时介绍了Python中的闭包,装饰器.这些思想和方法很美妙,我受益匪浅.当然这些都需要进一步运用和学习. 运行环境:Python3.6 + Jupyter notebook .caret, .dropup > .btn > .caret { border-top-col

C#函数式编程之标准高阶函数

何为高阶函数 大家可能对这个名词并不熟悉,但是这个名词所表达的事物却是我们经常使用到的.只要我们的函数的参数能够接收函数,或者函数能够返回函数,当然动态生成的也包括在内.那么我们就将这类函数叫做高阶函数.但是今天我们的标题并不是高阶函数,而是标准高阶函数,既然加上了这个标准,就意味着在函数式编程中有一套标准的函数,便于我们每次调用.而今天我们将会介绍三个标准函数,分别为Map.Filter.Fold. Map 这个函数的作用就是将列表中的每项从A类型转换到B类型,并形成一个新的类型.下面我们可以

JavaScript基础——高阶函数(map and reduce)

1 //高阶函数:一个函数可以接受另一个函数作为参数,这种函数称之为高阶函数. 2 /*1*/ 3 function f(x,y,f){ 4 return f(x)+f(y); 5 } 6 var sumAbs=f(-6,4,Math.abs); 7 console.log(sumAbs);//10 8 9 10 11 //map和reduce 12 /*map*/ 13 /*2*/ 14 function pow(x){ 15 return x*x; 16 } 17 var arr=[1,2,