例如,当人们说 Python 具有第一类函数时,听起来 Python 也具有第二类函数。但是,我还没有(有意地)在 Python 中遇到过第二类函数。当我们这么说时,它真的意味着“所有 Python 函数都是一流的吗?” 或者是否有 Python 中第二类函数的示例?
问问题
198 次
2 回答
6
首先,明确命名法。
术语“第一类函数”意味着它是类型系统中的“第一类”:也就是说,函数本身就是值。在函数不是第一类的语言中,函数被定义为值之间的关系,这使它们成为“第二类”。
换句话说,“第一类”函数意味着您可以将函数用作值,这意味着(除其他外)您可以将函数传递给函数。在 Java 7 之前,您无法在 Java 中执行此操作(反射不算在内),因此这是仅具有“二等”功能的编程语言的示例。为了“传递函数”,您必须定义该函数可以存在的类型(作为方法),然后传递该类型的实例。
因此,在 Python 中,所有函数都是第一类的,因为所有函数都可以用作值。
现在,您可能会混淆另一个概念。还有一个“高阶函数”的概念。高阶函数是将函数作为参数的函数。并非 Python 中的所有函数都是高阶函数,因为并非所有函数都将另一个函数作为参数。但即使不是高阶函数也是一流的。(这是一个正方形/矩形的东西。)
于 2017-11-17T18:41:05.700 回答
1
通常,当我们说“语言 X 具有一流的函数”时,我们实际上是指“语言 X 将函数视为一流的”(就像它对待其他类型一样)。这通常意味着您可以将函数作为参数传递,将它们存储在数组中,等等。
我看不出为什么一种特定语言(将函数视为一等)也会有二等函数(即那些不能作为参数传递的函数),但不能说 Python 是否有不。
于 2017-11-17T18:37:05.850 回答