【问题标题】:What makes Python not a functional programming language?是什么让 Python 不是函数式编程语言?
【发布时间】:2019-06-04 19:58:10
【问题描述】:

Python 变量是鸭子类型的,可变的,它的函数可以写成有副作用。 (换句话说,它有很多非函数式编程特性。)

但是,它也具有一流的功能,但它不是一种函数式编程语言。因此,我想编程语言可以具有功能方面(或另一种语言范式的方面)一定是真的,即使它不属于该范式。究竟是什么让 Python 不是成为一种函数式编程语言?是对它是否具有单一特征的测试还是对多个事物的测试? (如果是前者,使 Python 无法运行的单一方面或使 Haskell 正常运行的单一方面是什么?)

【问题讨论】:

标签: python functional-programming programming-languages first-class-functions


【解决方案1】:

Python 被认为是功能性的;如果你可以信任Wikipedia:

范式 多范式:函数式、命令式、面向对象、反射式

强调我的。这是来自摘要侧边栏。

应该注意的是,一种语言的“FP-ness”不是二元的,它是一个连续统一体。据我所知,Python 没有内置支持有效操作不可变结构。这是对它的一大打击,因为不可变性可以被认为是 FP 的一个强大方面。它也不支持尾调用优化,这在处理递归解决方案时可能是一个问题。正如您所提到的,它确实具有一流的功能,并且内置了对某些惯用语的支持,例如 map/comprehensions/generator 表达式、reduce 和数据的惰性处理。

如果您想专门处理函数式编程习惯用法,Python 可能不是最佳选择。不过,仅此一点并不能排除它被视为一种函数式语言。

【讨论】:

  • 几乎所有语言都是多范式的。
  • TCO = 尾调用优化?
  • @franklin 是的。对不起,我会写出来的。我看到 Sylwester 使用了不同的缩写,所以看起来不太标准。
【解决方案2】:

SO 上已经有一篇很棒的帖子:Why isn't Python very good for functional programming?

“Python 不是一种函数式语言”这句话源于该语言的设计支持其他范式而不是函数式风格 [1]。这并不意味着该语言没有显示出您所辨别的功能特征。甚至还有 official documentation 描述了如何利用 Python 语言以函数式风格编写代码。

Python 是一种多范式语言,因此它融合了它支持的每个范式的属性。 Python 可以很容易地被认为是一种范式,就像决定哪种范式最好一样,它取决于个人的意见。

对于一些有趣的相关读物,这里有一篇 SO 帖子,涉及到使语言成为纯粹功能性的一般困难(用于实际用途): Are there any purely functional Schemes or Lisps?

本文探讨了现实世界应用程序的冲突以及与函数式编程范式形成对比的技术细节:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.13.9123

[1] 最初设计的样子,以及继续设计的样子

【讨论】:

  • 不确定 any 语言是否可以是纯函数式的?因为世界不是“纯净的”。如果一个函数修改了一个数据库,它将是不纯的,不是吗?
猜你喜欢
  • 2011-04-01
  • 2010-09-28
  • 2011-02-09
  • 1970-01-01
  • 2017-01-14
  • 2011-04-27
  • 2014-06-07
  • 1970-01-01
  • 2022-12-10
相关资源
最近更新 更多