Python为什么不是一门函数式编程语言?

3

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

然而,它也拥有一流的函数,但它并不是一种函数式编程语言。因此,我想这一定是真的,即使一种编程语言不属于某种范式,它也可能具有功能方面(或其他语言范式的方面)。那么,到底是什么让Python不是一种函数式编程语言呢?它是测试是否具有单一特征还是测试多个方面的问题?(如果是前者,是什么方面使Python不是函数式的,或者是什么方面使Haskell函数式的?)


1
在我看来,由于它没有尾调用消除功能,递归使用起来并不好。如果像Scheme一样仅依靠它作为流程控制的手段是不可靠的。 - Sylwester
2
可能是为什么Python不太适合函数式编程?的重复问题。 - Mulan
2个回答

6

Python被认为是一种函数式语言;如果你相信维基百科

范型 多重范型:函数式,命令式,面向对象,反射

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

需要注意的是,语言的“FP-ness”不是二进制的,而是在一个连续体上的。据我所知,Python没有内置支持对不可变结构进行高效操作。这是一个很大的缺点,因为不变性可以被认为是FP的一个强大方面。它也不支持尾调用优化,在处理递归解决方案时可能会出现问题。正如你提到的那样,它确实有头等函数,并内置支持一些习惯用法,例如map/理解/生成器表达式、reduce和数据的惰性处理。

如果你想专门处理函数式编程习惯,Python可能不是最好的选择。但这并不排除它被认为是一种函数式语言。


2
几乎所有编程语言都是多范式的。 - Sylwester
TCO = 尾调用优化? - franklin
1
@franklin 是的。抱歉,我会写出来的。我看到Sylwester使用了不同的缩写,所以看起来它并不是很标准。 - Carcigenicate

2
一个在SO上的好帖子:为什么Python不太适合函数式编程? 语句“Python不是一种函数式语言”源于该语言的设计支持其他范例而非函数式[1]。这并不意味着该语言没有展现出函数式的特征,正如您所发现的那样。甚至有官方文档描述了如何利用Python语言以函数式风格编写代码。
Python是一种多范例语言,因此具有其所支持的每个范例的属性混合。Python可以轻松地被视为一个范例或不是,就像决定哪种范例最好一样,这取决于个人的观点。
对于一些有趣的相关阅读,这里是一个SO帖子,涉及到什么使一种语言纯粹的函数式(对于实际用途)非常困难:是否有任何纯函数式Schemes或Lisps? 而这篇文章则探讨了现实世界应用和与函数式编程范例相对的技术上的冲突:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.13.9123 [1] 作为最初的设计,以及继续进行的设计

不确定是否有任何一种语言可以是纯函数式的?因为世界并非“纯净”的。如果一个函数修改了数据库,那么它就是不纯的,对吧? - franklin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接