我一直认为函数式编程可以用Python完成.因此,我很惊讶Python在this个问题中没有得到太多的提及,而且当它被提到时,通常不是很积极.然而,没有给出多少原因(提到缺少模式匹配和代数数据类型).所以我的问题是:为什么Python不适合函数式编程?除了缺少模式匹配和代数数据类型之外,还有其他原因吗?或者,这些概念对于函数式编程如此重要,以至于不支持它们的语言只能被归类为二流函数式编程语言吗?(请记住,我的函数式编程经验相当有限.)

推荐答案

您提到的问题是哪种语言同时促进了面向对象和函数式编程.Python不会promote函数式编程,尽管它works做得相当好.

Python中最好的论点against函数式编程是Guido仔细考虑命令式/面向对象用例,而函数式编程用例则没有.当我编写命令式Python时,它是我所知道的最漂亮的语言之一.当我编写函数式Python时,它变得和没有BDFL的普通语言一样难看和令人不快.

这并不是说这是不好的,只是如果你转而使用一种促进函数式编程的语言,或者转而编写面向对象的Python,你就必须更加努力地工作.

以下是我在Python中错过的函数功能:


  • 没有模式匹配和尾部递归意味着你的基本算法必须被强制编写.在Python中,递归既丑陋又缓慢.
  • 一个小列表库和没有功能字典意味着你必须自己写很多东西.
  • 没有用于套用或合成的语法,这意味着无指针样式与显式传递参数一样充满标点符号.
  • 迭代器而不是惰性列表意味着您必须知道您想要的是效率还是持久性,如果您想要持久性,则必须将调用分散到list左右.(迭代器只使用一次)
  • Python简单的命令式语法,加上其简单的LL1解析器,意味着更好的if表达式和lambda表达式语法基本上是不可能的.圭多喜欢这样,我想他是对的.

Python相关问答推荐

Plotly Dash函数来切换图形参数-pPython

自动编码器和极坐标

情节生成的饼图文本超出页面边界

如何判断LazyFrame是否为空?

除了Python之外,可以替代bare?

如何知道标志是否由用户传递或具有默认值?

如何修复使用turtle和tkinter制作的绘画应用程序的撤销功能

Python plt.text中重叠,包adjust_text不起作用,如何修复?

DataFrame groupby函数从列返回数组而不是值

为什么我的Python代码在if-else声明中的行之前执行if-else声明中的行?

如何根据参数推断对象的返回类型?

. str.替换pandas.series的方法未按预期工作

删除所有列值,但判断是否存在任何二元组

将两只Pandas rame乘以指数

numpy卷积与有效

Pre—Commit MyPy无法禁用非错误消息

需要帮助重新调整python fill_between与数据点

CommandeError:模块numba没有属性generated_jit''''

考虑到同一天和前2天的前2个数值,如何估算电力时间序列数据中的缺失值?

使用特定值作为引用替换数据框行上的值