`type`真的是一个功能,还是没有?

Sar*_*sch 3 python types function object python-3.x

首先,如果我问一些愚蠢的话,我很抱歉,因为我是Python的新手...
我正在阅读http://docs.python.org/3.1/reference/datamodel.html#objects-values-and -types并看到那句话:

type()函数返回一个对象的类型(它本身就是一个对象)

当然,我决定检查一下:

>>> def someFunction(x):
...     return x * x
...     
>>> type(someFunction)
<class 'function'>
>>> type(type)
<class 'type'>
Run Code Online (Sandbox Code Playgroud)

所以,看起来函数有function类型,但是type如果它是一个函数,为什么函数有不同的类型?或者说文档是撒谎,它不是真正的功能?

Mar*_*ers 10

是的,type是一个函数,但它是用C实现的.

它也必须是它自己的类型,否则你不能这样做:

>>> def foo(): pass
... 
>>> type(foo)
<type 'function'>
>>> type(type)
<type 'type'>
>>> isinstance(type(foo), type)
True
Run Code Online (Sandbox Code Playgroud)

例如,你不能测试一个类型是否是一个类型,如果type类型不是,type但是function.我还在吗?

从技术上讲,它type是一个可调用的,并且有两个相关的角色可以发挥作用.它是一个元类(一个类工厂)和Python中所有类型的基础,并且在调用它时会生成一个type实例(<type 'function'>是该type类型的实例).

这同样适用于所有类型(包括类); 调用它们并生成给定类型的新实例.

  • 我总是认为那种类型是一个类 (2认同)
  • @SargeBorsch:`isinstance(foo,types.FunctionType)`工作正常. (2认同)