Python 变量是鸭子类型的,可变的,并且可以编写它的函数以产生副作用。(换句话说,它有很多非函数式编程特性。)
但是,它也具有一流的功能,但它不是一种函数式编程语言。因此,我想编程语言可以具有功能方面(或另一种语言范式的方面)一定是真的,即使它不属于该范式。究竟是什么让 Python不是函数式编程语言?是对它是否具有单一特征的测试还是对多个事物的测试?(如果是前者,使 Python 无法运行的单一方面或使 Haskell 起作用的单一方面是什么?)
Python 变量是鸭子类型的,可变的,并且可以编写它的函数以产生副作用。(换句话说,它有很多非函数式编程特性。)
但是,它也具有一流的功能,但它不是一种函数式编程语言。因此,我想编程语言可以具有功能方面(或另一种语言范式的方面)一定是真的,即使它不属于该范式。究竟是什么让 Python不是函数式编程语言?是对它是否具有单一特征的测试还是对多个事物的测试?(如果是前者,使 Python 无法运行的单一方面或使 Haskell 起作用的单一方面是什么?)
Python被认为是功能性的;如果您可以信任维基百科:
范式 多范式:函数式、命令式、面向对象、反射式
强调我的。这是来自摘要侧边栏。
应该注意的是,一种语言的“FP-ness”不是二元的,它是一个连续体。据我所知,Python 没有内置支持有效操作不可变结构。这是对它的一大打击,因为不可变性可以被认为是 FP 的一个强大方面。它也不支持尾调用优化,这在处理递归解决方案时可能是一个问题。正如您所提到的,它确实具有一流的功能,并且内置了对一些习惯用法的支持,例如map
/comprehensions/generator 表达式,reduce
以及数据的惰性处理。
如果您想专门处理函数式编程习语,Python 可能不是最佳选择。不过,仅此一点并不能排除它被认为是一种功能语言。
SO 上已经有一篇很棒的文章:为什么 Python 对函数式编程不是很好?
声明“Python不是一种函数式语言”源于该语言的设计支持其他范式而不是函数式样式 [1]。这并不意味着该语言没有显示出您所辨别的功能特征。甚至还有官方文档描述了如何利用 Python 语言以函数式风格编写代码。
Python 是一种多范式语言,因此它融合了它支持的每个范式的属性。Python可以很容易地被认为是一种范式,就像决定哪种范式最好一样,它取决于个人的意见。
对于一些有趣的相关阅读,这里有一篇 SO 文章,涉及到使语言成为纯粹功能性(用于实际用途)的一般困难: 是否有任何纯粹功能性的 Schemes 或 Lisps?
本文探讨了现实世界应用程序的冲突以及与函数式编程范式形成对比的技术性:http ://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.13.9123
[1] 最初设计的,以及继续设计的