Python变量是鸭子类型的,可变的,并且它的函数可以编写具有副作用的代码(换句话说,它具有很多非函数式编程特性)。
然而,它也拥有一流的函数,但它并不是一种函数式编程语言。因此,我想这一定是真的,即使一种编程语言不属于某种范式,它也可能具有功能方面(或其他语言范式的方面)。那么,到底是什么让Python不是一种函数式编程语言呢?它是测试是否具有单一特征还是测试多个方面的问题?(如果是前者,是什么方面使Python不是函数式的,或者是什么方面使Haskell函数式的?)
Python变量是鸭子类型的,可变的,并且它的函数可以编写具有副作用的代码(换句话说,它具有很多非函数式编程特性)。
然而,它也拥有一流的函数,但它并不是一种函数式编程语言。因此,我想这一定是真的,即使一种编程语言不属于某种范式,它也可能具有功能方面(或其他语言范式的方面)。那么,到底是什么让Python不是一种函数式编程语言呢?它是测试是否具有单一特征还是测试多个方面的问题?(如果是前者,是什么方面使Python不是函数式的,或者是什么方面使Haskell函数式的?)
Python被认为是一种函数式语言;如果你相信维基百科:
范型 多重范型:函数式,命令式,面向对象,反射
强调是我的。这来自于摘要侧边栏。
需要注意的是,语言的“FP-ness”不是二进制的,而是在一个连续体上的。据我所知,Python没有内置支持对不可变结构进行高效操作。这是一个很大的缺点,因为不变性可以被认为是FP的一个强大方面。它也不支持尾调用优化,在处理递归解决方案时可能会出现问题。正如你提到的那样,它确实有头等函数,并内置支持一些习惯用法,例如map
/理解/生成器表达式、reduce
和数据的惰性处理。
如果你想专门处理函数式编程习惯,Python可能不是最好的选择。但这并不排除它被认为是一种函数式语言。