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中的第一类对象?我的问题如下.
function.__class__意味着什么?它返回一个<type,function>并不重要的元组?一等只是意味着可以将函数视为一个值 - 也就是说,您可以将它们分配给变量,从函数返回它们,以及将它们作为参数传递.那就是你可以做代码:
>>> 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/
根据语言的不同,这可能意味着:
- 可表达为匿名文字值
- 可存储在变量中
- 可存储在数据结构中
- 具有内在身份(独立于任何给定的名称)
- 与其他实体具有同等可比性
- 可作为过程/函数的参数传递
- 可作为过程/函数的结果返回
- 在运行时可构造
- 可打印
- 具有可读性
- 可在分布式进程之间传输
- 可在运行进程之外存储