是什么让 Python 不是函数式编程语言?
What makes Python not a functional programming language?
Python 变量是鸭子类型的,可变的,它的函数 可以 编写为有副作用。 (换句话说,它有很多非函数式编程的特性。)
然而,它也有 first-class 函数,但它不是函数式编程语言。所以我猜想一定是真的,一种编程语言可以具有功能方面(或另一种语言范式的方面),即使它不属于该范式。究竟是什么让 Python 不是 函数式编程语言?是测试它是否具有单一特性还是多个事物的测试? (如果是前者,使 Python 无效的单一方面或使 Haskell 有效的单一方面是什么?)
Python 被认为是功能性的;如果你可以信任 Wikipedia:
Paradigm Multi-paradigm: functional, imperative, object-oriented, reflective
强调我的。这是来自摘要侧边栏。
而且应该注意的是,"FP-ness" 语言不是二元的,它是连续的。据我所知,Python 没有内置对不可变结构的有效操作的支持。这是对它的一大打击,因为不变性可以被认为是 FP 的一个强大方面。它还不支持尾调用优化,这在处理递归解决方案时可能是个问题。正如你提到的,它确实有 first-class 功能,并且内置了对一些习语的支持,例如 map
/comprehensions/generator 表达式,reduce
和数据的惰性处理.
如果您想专门处理函数式编程习语,Python可能不是最佳选择。不过,仅凭这一点并不能排除它被认为是一种功能性语言。
一个伟大的 post 已经在 SO: Why isn't Python very good for functional programming?
语句 "Python is not a functional language" 源于语言的设计,支持功能风格 [1] 上的其他范例。这并不意味着该语言不显示您所看到的功能特征。甚至 official documentation 描述了如何利用 python 语言以函数式风格编写代码。
Python 是一种多范式语言,因此混合了它支持的每个范式的属性。 Python很容易被认为是一种范式或不是一种范式,就像决定哪种范式最好一样,它取决于个人的意见。
对于一些有趣的相关读物,这里有一个 SO post 触及了使一门语言成为纯粹功能性语言(用于实际用途)的一般困难:
Are there any purely functional Schemes or Lisps?
本文探讨了现实世界应用程序的冲突以及与函数式编程范式对比的技术细节:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.13.9123
[1] 最初的设计,以及后续的设计
Python 变量是鸭子类型的,可变的,它的函数 可以 编写为有副作用。 (换句话说,它有很多非函数式编程的特性。)
然而,它也有 first-class 函数,但它不是函数式编程语言。所以我猜想一定是真的,一种编程语言可以具有功能方面(或另一种语言范式的方面),即使它不属于该范式。究竟是什么让 Python 不是 函数式编程语言?是测试它是否具有单一特性还是多个事物的测试? (如果是前者,使 Python 无效的单一方面或使 Haskell 有效的单一方面是什么?)
Python 被认为是功能性的;如果你可以信任 Wikipedia:
Paradigm Multi-paradigm: functional, imperative, object-oriented, reflective
强调我的。这是来自摘要侧边栏。
而且应该注意的是,"FP-ness" 语言不是二元的,它是连续的。据我所知,Python 没有内置对不可变结构的有效操作的支持。这是对它的一大打击,因为不变性可以被认为是 FP 的一个强大方面。它还不支持尾调用优化,这在处理递归解决方案时可能是个问题。正如你提到的,它确实有 first-class 功能,并且内置了对一些习语的支持,例如 map
/comprehensions/generator 表达式,reduce
和数据的惰性处理.
如果您想专门处理函数式编程习语,Python可能不是最佳选择。不过,仅凭这一点并不能排除它被认为是一种功能性语言。
一个伟大的 post 已经在 SO: Why isn't Python very good for functional programming?
语句 "Python is not a functional language" 源于语言的设计,支持功能风格 [1] 上的其他范例。这并不意味着该语言不显示您所看到的功能特征。甚至 official documentation 描述了如何利用 python 语言以函数式风格编写代码。
Python 是一种多范式语言,因此混合了它支持的每个范式的属性。 Python很容易被认为是一种范式或不是一种范式,就像决定哪种范式最好一样,它取决于个人的意见。
对于一些有趣的相关读物,这里有一个 SO post 触及了使一门语言成为纯粹功能性语言(用于实际用途)的一般困难: Are there any purely functional Schemes or Lisps?
本文探讨了现实世界应用程序的冲突以及与函数式编程范式对比的技术细节:http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.13.9123
[1] 最初的设计,以及后续的设计