What makes Python not a functional programming language?
python变量是duck类型的、可变的,它的函数可以被编写成具有副作用。(换句话说,它有很多非功能编程特性。)
然而,它也有一流的函数,但它不是一种函数式编程语言。所以我想编程语言可以有功能方面(或者另一种语言范式的方面),即使它不属于那种范式也是真的。究竟是什么使得python不是一种函数式编程语言?它是测试它是否具有单一的特性,还是多个事物的测试?(如果是前者,那么让python不起作用的单一方面是什么,或者让haskell起作用的单一方面是什么?)
python被认为是功能性的;如果你可以信任wikipedia:
Paradigm Multi-paradigm: functional, imperative, object-oriented, reflective
强调我的。这是摘要侧栏中的内容。
应该注意的是,语言的"fp ness"不是二进制的,而是连续的。据我所知,python没有内置的对不可变结构有效操作的支持。这是一个很大的打击,因为不变性可以被认为是FP的一个强大方面。它也不支持尾调用优化,这在处理递归解决方案时可能是一个问题。正如您所提到的,它确实具有一流的功能,并且内置了对一些习惯用法的支持,例如
如果您只想处理函数式编程习惯用法,那么Python可能不是最佳选择。但单凭这一点并不能排除它被认为是一种功能性语言。
已经有一篇很好的文章了:为什么Python对于函数式编程不是很好?
python"不是"一种功能性语言的说法源于该语言设计的重点,该语言旨在支持功能性风格之上的其他范式(正如最初设计的那样,以及继续设计的那样)。这并不意味着语言不会像你所看到的那样显示出功能特征。甚至还有一些python文档描述了如何利用python语言以函数形式编写代码:https://docs.python.org/2/howto/functional.html网站
Python是一种多范式语言,因此它支持的每一种范式都混合了属性。python很容易被认为是一个范例,或者不被认为是一个范例,很像决定哪一个范例是最好的,它取决于个人的意见。
对于一些有趣的相关读物,这里有一篇这样的文章,讨论了使一种语言纯粹起作用的一般困难(用于实际应用):是否有纯粹的功能方案或LISP?
本文探讨了现实世界中应用程序的冲突,以及与函数式编程范式(http://citeseerx.ist.psu.edu/viewdoc/summary)形成对比的技术特性。doi=10.1.1.13.9123