1 致谢

感谢廖雪峰老师的教程讲解,虽然我自己的理解他所讲述的有所区别,但是他的讲解和例题还是比较具有代表性的,原文链接如下:
https://www.liaoxuefeng.com/wiki/1016959663602400/1017328525009056

2 前言

今天高老师讲课的时候讲到了“面向函数的编程方法”,刚开始我不是很懂,(其实很久之前我就看过相关的文章,不过那时候就没有完全弄懂),今天仍然存在一些疑问,感觉在高老师看来,“函数式编程的可读性也很好,不好懂是因为不懂函数式编程”,在我看来这样的论述是十分武断的,其实“面向对象”和“面向函数”是程序员理解业务模型的两种方式,就像英文和中文是两种语言一样,说“一段由函数式编程编写的代码不好懂,是因为不懂函数编程”,我觉得这样的话没有任何价值,就像说“一段英文不好懂,是因为你不懂英语”,那就因人而异了吧,我拿一篇音频信号处理的英文论文就算给ETS的考官,她也不一定看得懂呀,这些比较偏置性的论述对我们理解不同编程思想是没有任何益处的。

3 不懂函数式编程会怎么样

答案是:基本上没有任何问题。
其实对于Youki来说,也是今年刚刚开始正式接触函数式编程,而此时Youki已经硕士毕业了,并且本科专业和硕士专业都是属于计算机科学,对计算机科学的相关知识有着广泛地了解,在这其中也接触过很多的项目;不过在印象中,似乎Youki没有用到过“函数式编程”,所以即使我们不会函数式编程,也是没有任何关系的;
但是为什么说是“基本上”呢?首先,我们作为计算机科学的追求者,我们应当去更多地了解计算机科学的相关知识,函数式编程既然发展的如此火热,我们也应当对她有着足够的了解,这样可以拓宽我们的视野;再者,其实“递归”也是函数式编程的一种表现形式,甚至可以说,连“x + y +z”这样的语句也可以被称作是函数式编程,其实,函数式编程就在我们身边,她并没有我们想象的那么遥远,只是我们并没有从概念上去严格地区分她与面向过程编程之间的区别罢了;
那么有的小伙伴会说,既然你说我接触过函数式编程,那么为什么我觉得理解函数式编程还是有些困难呢,要解答这个问题,我们要不先说说Python,因为Youki也是从学习Python开始正式地接触函数式编程;

4 纯函数式编程

Python是一门比较神奇的语言,(虽然Youki个人还是最喜欢Java),Python语言中同时集成了两种编程思想,也就是我们常说的“面向对象编程”和“面向函数编程”思想,但是实际上,在我们看到的代码中,两种编程思想都是同时存在的,因为我们会同时看到lambda表示式和for循环同时存在,但是实际上,对于一个严格的“函数式编程”来说,for循环是不需要的,因为数据与数据之间组织的关系是函数,也就是说,两种数据之间是利用函数来联系的,我们并不需要循环这种结构来显式地表达数据之间的依赖关系,从根本上来说,for循环其实是面向过程编程思想的体现;
而真正的纯函数式编程是不需要面向过程的流程控制语句的,学习过C语言的同学都知道,顺序、分支、循环是流程控制的三大基本元素,也就是面向过程编程的基石,通过这三种元素的组合,我们可以通过描述程序的执行过程将程序的算法思想展现出来,以最简单的自然数累加求和运算为例:我们通过循环语句累加各个自然数,用判断指定需要累加的最大范围,用顺序表示累加的流程,就完成了最基本的累加运算;而函数式编程,将可以所有的过程首先通过函数表示,再把函数转换为代码,以累加为例:Sn+1=Sn+an+1S_{n+1} =S_{n} + a_{n+1}Sn+1​=Sn​+an+1​ 。

5 纯函数式编程的缺点

5.1 无法实现数据复用

无法实现数据复用,其根本原因是纯函数式编程不允许变量复用,(貌似一个可能的解决办法是在内存中常驻某些已经运算过的函数值)。

5.2 没有循环——无法表征中间过程的状态

实际上,在人类的世界中,时间是一个不可逆的维度,数据处理也不可能在瞬间完成,而纯函数式编程无法输出处理过程中的中间状态;

Python中函数式编程的学习感想~相关推荐

  1. java和python中函数式编程

    本篇文章将基于java和python分别介绍Lambda表达式,包括定义,使用等 java函数式编程 自jdk1.8开始,java中引入了函数式编程,使编程更加简洁灵活.接下来通过详细的例子阐述 函数 ...

  2. 用python处理excel数据做函数_如何使用python通过函数式编程完成excel中的数据处理及分析工作...

    Excel是数据分析中最常用的工具,本篇文章通过python与excel的功能对比介绍如何使用python通过函数式编程完成excel中的数据处理及分析工作.在Python中pandas库用于数据处理 ...

  3. 白话 Python 的函数式编程

    今天和大家聊聊 Python 的函数式编程特性.所谓函数式编程,就是指代码中每一块都是不可变的(immutable),都是由 pure function 的形式组成.这里的 pure function ...

  4. Python的函数式编程--从入门到⎡放弃⎦

    很早以前就听说过了函数式编程,印象中是一种很晦涩难懂的编程模式,但却一直没有去进行了解. 恰好这周组内的周会轮到我主持,一时也没想到要分享什么.灵光一闪,就选定函数式编程这个主题吧,反正组里的同事都没 ...

  5. python采用函数式编程模式吗_Python函数与函数式编程

    1 函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创 ...

  6. 函数式编程|python的函数式编程

    面向过程,面向对象 面向过程: 分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了 面向对象: 把问题中的事务分解成各个对象,建立对象的目的不是为了完成一 ...

  7. JS中函数式编程详解版(FunctionalProgramming,FP)

    函数式编程详解 函数式编程的认识 函数式编程前置知识 函数是一等公民(First-class Function) 高阶函数 闭包 函数式编程基础 纯函数 lodash 模块 柯里化 函数组合 函子 函 ...

  8. 05 python 要点 (函数式编程)

    复习时先看看这个:https://blog.csdn.net/weixin_39880623/article/details/110153616? 第一章 函数式编程 一.生成器  (generato ...

  9. 【Python】函数式编程

    前言 函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计.函数就是面向过程的程序设计的基本 ...

最新文章

  1. 【量化投资】策略七(聚宽)
  2. linux中mysql回滚重演_DM7 达梦 数据库 数据守护(Data Watch) (1) -- 基本概念
  3. 记一次 Python Web 接口优化
  4. Linq 读取Xml 数据
  5. 【opencv学习】单应性变换Homography
  6. java string范围_字符串索引超出范围? (Java,子字符串循环...
  7. android 内凹的圆角,css实现内凹圆角,利用圆角反向进行(转)
  8. ionic 安卓apk签名_安卓 APP 三代加壳方案的研究报告
  9. 要求在ASP.NET Core 2.2中确认电子邮件——第2部分
  10. 【数据结构笔记09】二叉树的定义、性质、实现
  11. tensoflow随笔——softmax和交叉熵
  12. 运维记之源码编译nfs-utils和rpcbind
  13. 代码雨【code rain】 cmd 命令快速实现 + java 实现
  14. 【设计模式】Unity3D 观察者模式
  15. Tomcat下载以及IDEA配置Tomcat
  16. MySQL导入myi,myd,frm文件及浏览
  17. 【安卓学习之第三方库】 Rxpay学习:支付宝微信支付
  18. 【计算机网络】6 路由器与静态路由配置
  19. MySQL:count(*) count(字段) 实现上区别
  20. mysql经常断电_MySQL突然断电异常解决

热门文章

  1. Tomcat性能监控LambdaProbe
  2. 一个C++的ElasticSearch Client
  3. VMware下Mac系统自适应屏幕
  4. Scrapy框架(持久化,去重,深度控制,cookie)
  5. C# Cache何时使用及使用方法
  6. iframe之间操作记录
  7. windbg查询内存泄笔记
  8. 福布斯评最佳与最差老板 TCL上黑榜
  9. 羊皮卷的实践-第二十章
  10. 【JavaScript 笔记 】— 基础语法(数据类型、字符串、数组、对象、Map、Set、iterable、函数基础)