第 class 个函数的词汇表

The vocabulary of first class functions

例如,当人们说 Python 具有第一个 class 功能时,听起来 Python 也具有第二个 class 功能。但是,我从未(有意地)在 Python 中遇到第二个 class 函数。当我们这样说时,它真的意味着 "All Python functions are first class?" 还是在 Python 中有第二个 class 函数的例子?

通常,当我们说 "language X has first-class functions" 时,我们实际上是指 "language X treats functions as first-class"(就像其他类型一样)。它通常意味着您可以将函数作为参数传递,将它们存储在数组中等。

我看不出任何特定语言(将函数视为 first-class)会 具有 second-class 函数的任何原因(即那些 不能 作为参数传递的),但不能说 Python 是否可以。

首先,明确术语。

术语"first class functions"表示它在类型系统中是"first class":也就是说,函数本身就是值。在函数不是第一个 class 的语言中,函数被定义为值之间的关系,这使得它们 "second class".

换句话说,"first class" 函数意味着您可以将函数用作值,这意味着(除其他外)您可以将函数传递给函数。在 Java 7 之前,您不能在 Java 中执行此操作(反射不算数),因此这是仅具有 "second class" 函数的编程语言的示例。为了 "pass a function",您必须定义一个函数可以存在的类型(作为方法),然后传递该类型的实例。

所以,在Python中,all函数先class,因为all函数可以用作为一个值。

现在,您可能会对另一个概念感到困惑。还有一个"higher order function"的概念。高阶函数是将函数作为参数的函数。并非 Python 中的所有函数都是高阶函数,因为并非所有函数都将另一个函数作为参数。但是即使不是高阶的函数也是第一个class。 (这是 square/rectangle 的事情。)