函数是python中的第一类对象吗?

liv*_*hak 3 python object python-2.7

我正在学习python的教程.它解释了函数是如何在Python中的第一类对象.

def foo():
        pass
print(foo.__class__)

print(issubclass(foo.__class__,object))
Run Code Online (Sandbox Code Playgroud)

我得到的上述代码的输出是

<type 'function'>
True
Run Code Online (Sandbox Code Playgroud)

这个程序应该证明函数是python中的第一类对象?我的问题如下.

  1. 上面的代码如何证明函数是拳头类对象?
  2. 第一类对象的属性是什么?
  3. 什么function.__class__意味着什么?它返回一个<type,function>并不重要的元组?

Tom*_*ron 11

以下是Guido在博客中对头等对象所说的内容:

我的Python目标之一就是让所有对象都成为"头等舱".通过这个,我的意思是我希望所有可以在语言中命名的对象(例如,整数,字符串,函数,类,模块,方法等)具有相同的状态.也就是说,它们可以分配给变量,放在列表中,存储在字典中,作为参数传递,等等.

整个博客文章值得一读.

在您发布的示例中,教程可能会指出第一类对象通常是"对象"类的后代.


dr *_*bob 6

一等只是意味着可以将函数视为一个值 - 也就是说,您可以将它们分配给变量,从函数返回它们,以及将它们作为参数传递.那就是你可以做代码:

>>> def say_hi():
        print "hi"
>>> def say_bye():
        print "bye"
>>> f = say_hi
>>> f()
hi
>>> f = say_bye
>>> f()
bye
Run Code Online (Sandbox Code Playgroud)

这很有用,因为您现在可以将函数分配给变量,例如任何普通变量:

>>> for f in (say_hi, say_bye):
        f()
hi
bye
Run Code Online (Sandbox Code Playgroud)

或者编写更高阶的函数(将函数作为参数):

>>> def call_func_n_times(f, n):
        for i in range(n):
            f()
>>> call_func_n_times(say_hi, 3)
hi
hi
hi
>>> call_func_n_times(say_bye, 2)
bye
bye
Run Code Online (Sandbox Code Playgroud)

关于 __class__python告诉type你有什么对象.例如,如果你定义一个Python列表对象: a = [1,2,3],然后a.__class__<type 'list'>.如果你有一个日期时间(from datetime import datetime然后d = datetime.now(),d实例的类型将是<type 'datetime.datetime'>.他们只是在python中显示一个函数不是一个全新的概念.它只是一个普通的对象<type 'function'>.


小智 2

您证明了函数是第一类对象,因为您可以foo作为参数传递给方法。

这篇文章很好地总结了第一类对象的属性:/sf/answers/17164591/

根据语言的不同,这可能意味着:

  • 可表达为匿名文字值
  • 可存储在变量中
  • 可存储在数据结构中
  • 具有内在身份(独立于任何给定的名称)
  • 与其他实体具有同等可比性
  • 可作为过程/函数的参数传递
  • 可作为过程/函数的结果返回
  • 在运行时可构造
  • 可打印
  • 具有可读性
  • 可在分布式进程之间传输
  • 可在运行进程之外存储