28

我仍然对什么是一流的功能感到困惑。如果我理解正确,一等函数应该使用一个函数作为对象。这个对吗?

这是一流的功能吗?

def this_is_example(myarg1):
    return myarg1

def this_is_another_example(myarg):
    return this_is_example(myarg) + myarg

this_is_another_example(1)
4

8 回答 8

40

一等函数不是特定类型的函数。Python 中的所有函数都是一等函数。说函数在某种编程语言中是一流的,意味着它们可以像传递和操作其他类型的对象(如整数或字符串)一样被传递和操作。您可以将函数分配给变量,将其作为参数传递给另一个函数,等等。区别不在于单个函数可以是或不是第一类,而是整个语言可能将函数视为第一类对象,也可能不是.

于 2014-12-10T02:35:21.453 回答
20

“一等函数”(FCF)是被视为所谓的“一等公民”(FCC)的函数。编程语言中的 FCC 是对象(在这里非常随意地使用术语“对象”),它:

  • 可用作参数
  • 可以用作返回值
  • 可以赋值给变量
  • 可以存储在数据结构中,例如哈希表、列表、...

实际上,非常粗略和简单地说,FCF 是“函数”类型的变量(或指向函数的变量)。你可以用它们做任何你可以用“正常”变量做的事情。

知道这一点,两者this_is_another_example(myarg)都是this_is_example(myarg1)一等函数,因为在某些编程语言中所有函数都是一等函数。

于 2014-12-10T02:39:16.393 回答
6

不,您说的是高阶函数——请参阅.

第一类函数:如果一个函数可以分配给一个变量或作为对象/变量传递给其他函数,则该函数称为第一类函数。

Python、JavaScript 和 C(指针)支持一流的函数。

一个简单的例子(在python中):

def square(x): return x * x
def cube(x): return x * x * x

def print_result(x, func):
    """recieve a function and execute it and return result"""
    return func(x)

do_square = square     # assigning square function to a variable
do_cube = cube         # assigning cube function to a variable

res = print_result(5, do_square)   # passing function to another function
print res
res = print_result(5, do_cube)
print res

该程序仅用于说明。

于 2017-02-24T21:01:59.693 回答
4

Python中的第一类函数:

“一流”概念仅与编程语言中的函数有关。一等函数意味着该语言将函数视为值——您可以将函数分配给变量,将其传递等等。它很少用于指代函数,例如“一等函数”。更常见的说法是“一种语言有/没有一流的功能支持”。所以“有一流的功能”是一种语言的属性。

一等函数的性质:

  • 函数是 Object 类型的实例。
  • 您可以将函数存储在变量中。
  • 您可以将函数作为参数传递给另一个函数。
  • 您可以从函数返回函数。
  • 您可以将它们存储在数据结构中,例如哈希表、列表等。

因此,支持具有函数类型的值并将它们视为非函数值的语言可以说具有“第一类函数”。

于 2019-10-26T06:23:37.153 回答
1

Python中的第一类函数

语言中的第一类对象在整个过程中被统一处理。它们可以存储在数据结构中,作为参数传递,或者在控制结构中使用。如果一种编程语言将函数视为一等对象,则称它支持一等函数。Python 支持 First Class 函数的概念。

第一类函数的属性:
函数是 Object 类型的实例。
- 您可以将函数存储在变量中。- 您可以将函数作为参数传递给另一个函数。- 您可以从函数返回函数。- 您可以将它们存储在数据结构中,例如哈希表、列表……

说明 Python 中的第一类函数的示例
1. 函数是对象:Python 函数是第一类对象。在下面的示例中,我们将函数分配给变量。此分配不调用该函数。它获取由喊叫引用的函数对象并创建指向它的第二个名称,叫喊。



    # Python program to illustrate functions
    # can be treated as objects
    def shout(text):  
        return text.upper()      
    print shout('Hello') 
    yell = shout 
    print yell('Hello')

输出:
你好
你好

  1. 函数可以作为参数传递给其他函数:因为函数是对象,我们可以将它们作为参数传递给其他函数。可以接受其他函数作为参数的函数也称为高阶函数。在下面的示例中,我们创建了一个以函数作为参数的函数 greet。


    # Python program to illustrate functions
    # can be passed as arguments to other functions
    def shout(text):
        return text.upper()
    def whisper(text):
        return text.lower()
    def greet(func):
        #storing the function in a variable
        greeting = func("Hi, I am created by a function passed as an argument.")
        print greeting     
    greet(shout)
    greet(whisper)

输出:
嗨,我是由作为参数传递的函数创建的。
嗨,我是由作为参数传递的函数创建的。

  1. 函数可以返回另一个函数:因为函数是对象,我们可以从另一个函数返回一个函数。在下面的示例中,create_adder 函数返回 adder 函数。


    #Python program to illustrate functions
    #Functions can return another function    
    def create_adder(x):  
        def adder(y):  
            return x+y  
        return adder  
    add_15 = create_adder(15)
    print add_15(10)

输出:
25

于 2017-08-01T13:57:07.180 回答
1
def pie(r):
    def circleArea(d):
        return r * (d ** 2)
    return circleArea

c = pie(3.14)
print c(2)

以上是python中第一类函数的示例。

于 2017-05-18T07:15:59.623 回答
0

python 中的每个函数都是一流的,因为它们可以像任何其他对象一样被传递。

于 2014-12-10T03:07:13.553 回答
0

这是一个很好的例子来说明Python的经典形式的一等函数:一个包含 lambda 函数的变量

twice = lambda x: 2 * x
d = twice(5)
print(d)  # 10
于 2020-04-21T20:02:32.560 回答