为什么Python不适合函数式编程?
我一直认为可以用Python完成函数式编程。 因此,我很惊讶Python在这个问题上没有提到太多的内容,当提到时,它通常不是很积极。 然而,没有给出很多理由(缺少模式匹配和代数数据类型)。 所以我的问题是:为什么Python不是很适合函数式编程? 是否有比缺少模式匹配和代数数据类型更多的原因? 或者这些概念对函数式编程如此重要,以至于不支持它们的语言只能被归类为二次函数式编程语言? (请记住,我的函数式编程经验非常有限。)
您参考的问题是询问哪种语言可以促进OO和函数式编程。 即使Python运行良好,Python也不会促进函数式编程。
在Python中反对函数式编程的最佳观点是,Guido仔细考虑了命令/ OO用例,而函数式编程用例却没有。 当我编写命令式Python时,它是我认识的最漂亮的语言之一。 当我编写函数式Python时,它会变得和没有BDFL的普通语言一样丑陋和不愉快。
这并不是说它很糟糕,只是因为如果你改用一种促进函数式编程的语言或者转向编写面向对象的Python,你必须比你更努力地工作。
以下是我在Python中错过的功能性内容:
list
。 (迭代器只使用一次) Guido在这里有一个很好的解释。 这是最相关的部分:
我从来没有考虑过Python会受到函数式语言的严重影响,无论人们怎么说或想什么。 我对C和Algol 68等命令式语言更加熟悉,尽管我制作了一流的对象,但我并没有将Python看作一种功能性编程语言。 然而,早些时候,很明显,用户想要使用列表和功能做更多的事情。
...
值得注意的是,尽管我没有将Python视为一种功能性语言,但是闭包的引入对于许多其他高级编程功能的开发非常有用。 例如,新式类,装饰器和其他现代特征的某些方面依赖于这种能力。
最后,尽管多年来引入了许多功能性编程功能,但Python仍然缺乏“真正”功能性编程语言中的某些功能。 例如,Python不会执行某些种类的优化(例如,尾递归)。 一般来说,因为Python非常动态的特性,所以不可能从Haskell或ML等函数语言中进行编译时优化。 这很好。
我从这件事中拉出两件事:
Scheme没有代数数据类型或模式匹配,但它当然是一种功能语言。 从函数式编程的角度来讨论关于Python的东西:
残废的兰姆达斯。 由于Lambdas只能包含一个表达式,并且不能在表达式上下文中轻松完成所有任务,这意味着您可以“即时”定义的函数受到限制。
Ifs是语句,而不是表达式。 这意味着,除了别的以外,你不能在里面有一个带有If的lambda。 (这在Python 2.5中被三元组固定,但看起来很丑。)
Guido威胁要在一段时间内删除地图,过滤和减少每一次
另一方面,python有词法关闭,Lambdas和列表解析(无论Guido是否承认它都是真正的“功能”概念)。 我在Python中做了大量的“功能风格”编程,但我很少说这是理想的。
链接地址: http://www.djcxy.com/p/53545.html