python语言支持编程方式有函数式编程,python是函数式编程语言吗

  python语言支持编程方式有函数式编程,python是函数式编程语言吗

  边肖收到了朋友的请求,向你展示函数式编程。这个内容大家都不陌生,经常需要应用。以下详细介绍已整理完毕。来看看吧~

  函数式编程理解:

  写代码的时候,函数式编程更多来自于声明式方法,传统编程更多来自于命令式方法。比如上面筛选学生年龄,传统的编程思路是,我创造了什么,我流传了什么,我评判了什么,得到了什么结果;函数式编程的思想是,我声明一个筛选函数,我声明一个判断函数,我把这两个函数结合起来得到一个结果。

  关于纯函数

  在函数式编程的概念中,一个重要的概念就是纯函数,那么什么是纯函数呢?

  我们用代码来解释什么是纯函数:

  constz=10

  添加(x,y){

  returnx y;

  }

  复制代码

  上面的add函数是一个纯函数,它读取x和y参数的值,返回它们的和,不受全局z变量的影响。

  改变这个功能。

  constz=10

  添加(x,y){

  returnx y z;

  }

  复制代码使这个函数成为不纯函数,因为它返回的值会受到全局z的影响,换句话说,这个函数会受到外界环境的影响,我们得到了判断它是否是纯函数的第一个重要依据。3354纯功能不会受外界环境影响。

  再用splice和slice来解释一下:

  varxs=[1,2,3,4,5];

  //纯

  xs.slice(0,3);

  //=[1,2,3]

  xs.slice(0,3);

  //=[1,2,3]

  xs.slice(0,3);

  //=[1,2,3]

  //不纯

  xs.splice(0,3);

  //=[1,2,3]

  xs.splice(0,3);

  //=[4,5]

  xs.splice(0,3);

  //=[]

  Copy code slice每次接收相同的参数,返回相同的值,所以是纯函数,splice接收。

  同样的参数,每次返回不同的值,所以不是纯函数,我们就得出了第二个判断是否纯函数的重要依据——纯函数相同的输入,永远会得到相同的输出。

  

总结:

  

'纯函数是这样一种函数,即相同的输入,永远会得到相同的输出,而且没有任何可观察的副作用'

  复制代码

关于柯里化

  

柯里化的概念很简单:只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数。

  

constadd=x=>y=>x+y;

  add(1)(2);

  //=>3

  复制代码

上面的例子,就是一个很典型的柯里化函数,在我们第一调用的时候,接收了第一次传入的参数(用闭包记住),返回了一个新的函数;在第二次调用的时候,接收第二次传入的参数,并且和第一次传入的函数相加,返回它们的和。

  

运用上面的思想编写一个的柯里化函数:

  

currying(fn,...args1){

  //'判断传入的参数是否满足传入函数需要的参数,比如说add函数需要两个参数相加,那么判断是否传入了两个参数,满足调用传入函数计算结果'

  if(args1.length>=fn.length){

  console.log(args1,'--1--');

  returnfn(...args1);

  }

  //'不满足返回一个新的函数,继续调用柯里化函数,传入保存的第一次传入的函数,传入保存的第一次传入的参数,传入第二次传入的参数,继续上面的判断逻辑,返回计算结果'

  return(...args2)=>{

  console.log(args2,'--2--');

  returncurrying(fn,...args1,...args2);

  };

  },

  //定义一个一般函数

  constadd=(x,y)=>x+y;

  //使用

  constincrement=currying(add,1);

  console.log(increment(2));

  constaddTen=currying(add,10);

  console.log(addTen(2));

  //=>[2]--2--

  //=>[1,2]--1--

  //=>3

  //=>[2]--2--

  //=>[10,2]--1--

  //=>12

  复制代码

柯里化函数比较重要的思想是:

  

多次判断传入的参数是否满足计算需求,满足,返回计算结果,如果不满足,继续返回一个新的柯里化函数

  

关于代码组合

  

首先,先写一个简单的组合函数:

  

constcompose=(f,g)=>x=>f(g(x));

这个组合函数接收两个函数当作参数,然后返回一个新的函数,x是两个函数之间都要使用的值,比如说:

  

constcompose=(...fns)=>(...args)=>fns.reduceRight((res,fn)=>[fn.call(null,...res)],args)[0];

  //使用,实现一个功能,字符串变成大写,加上个感叹号,还要截取一部分,再在前面加上注释

  consttoUpperCase=x=>x.toUpperCase();

  constexclaim=x=>`${x}!`;

  consthead=x=>`sliceis:${x}`;

  constreverse=x=>x.slice(0,7);

  constshout=compose(exclaim,toUpperCase,head,reverse)

  shout('mynameismaya')

  //=>SLICEIS:MYNAME!

  复制代码

组合的原理其实就是数学中的结合律:

  

(a+b)+c=a+(b+c)

对组合的理解是:

  

组合是什么,组合就是运用了数学里的结合律,像是搭积木一样,把不同的函数联系起来,让数据在里面流动

  

在各种库里面都有组合的函数,lodash,underscore,ramda等等,比如在underscore里面,组合是这样的:

  

//Returnsafunctionthatisthecompositionofalistoffunctions,each

  //consumingthereturnvalueofthefunctionthatfollows.

  _.compose=function(){

  varargs=arguments;

  varstart=args.length-1;

  returnfunction(){

  vari=start;

  varresult=args[start].apply(this,arguments);

  while(i--)result=args[i].call(this,result);

  returnresult;

  };

  };

  复制代码

相信大家到这里已经初步了解了函数式编程的概念了,那么我们怎么使用函数式编程的方式写代码呢,举个例子:

  

//伪代码,思路

  //比如说,我们请求后台拿到了一个数据,然后我们需要筛选几次这个数据,取出里面的一部分,并且排序

  //数据

  constres={

  status:200,

  data:[

  {

  id:xxx,

  name:xxx,

  time:xxx,

  content:xxx,

  created:xxx

  },

  ...

  ]

  }

  //封装的请求函数

  consthttp=xxx;

  //'传统写法是这样的'

  http.post

  .then(res=>拿到数据)

  .then(res=>做出筛选)

  .then(res=>做出筛选)

  .then(res=>取出一部分)

  .then(res=>排序)

  

  //'函数式编程是这样的'

  //声明一个筛选函数

  consta=curry()

  //声明一个取出函数

  constb=curry()

  //声明一个排序函数

  constc=curry()

  //组合起来

  constshout=compose(c,b,a)

  //使用

  shout(http.post)

  复制代码

如果想要在项目里面正式使用函数式编程有这样几个步骤:

  

1、先尝试使用ES6自带的高阶函数

  

2、熟悉了ES6自带的高阶函数后,可以自己尝试写几个高阶函数

  

3、在这个过程中,尽量使用纯函数编写代码

  

4、对函数式编程有所了解之后,尝试使用类似ramda的库来编写代码

  

5、在使用ramda的过程中,可以尝试研究它的源代码

  

6、尝试编写自己的库,柯里化函数,组合函数等

  

以上就是关于函数式的全部内容介绍,大家可以消化学习,如需了解更多python实用知识,点击进入PyThon学习网教学中心

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • python语言基本语句用法总结大全,python语言基本语句用法总结怎么写
  • python语言基本语句用法总结大全,python语言基本语句用法总结怎么写,python语言基本语句用法总结
  • python是一种什么类型的计算机语言,python语言是一种什么类型的编程语言
  • Python的保留字符,python语言中的保留字
  • python的指数e怎么表示,指数函数在python语言中怎么表示
  • python语言合法的变量命名,在python中变量的命名要注意哪些问题
  • python变量命名可以用中文吗,下面哪一个不是python语言合法的变量命名
  • Python分词库,用python语言中文分词第三方库jieba对文件data
  • python中复数类型的实部和虚部都是浮点数,python语言中,复数类型中实数部分和虚数部分
  • 用python语言判断一个数是否为素数,Python判断是不是素数
  • python语句变量命名规则,python语言命名变量规则
  • 简述python语言程序的特点,以下关于python语言技术特点
  • matlab中for循环的用法例子,python语言for循环语句
  • Python主网站,python语言的官方网站
  • 用python开发的软件有哪些,哪些工具可以使用python语言开发软件
  • 留言与评论(共有 条评论)
       
    验证码: