Python “函数”和“模块”的类型是什么`

Python “函数”和“模块”的类型是什么`,python,python-3.x,Python,Python 3.x,既然函数是一个类,而类是一个对象,那么函数的类型是什么,即它是什么的实例 正如评论所建议的那样 >>> type(function) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'function' is not defined 函数是Python中最简单的可调用对象。 内置模块存储整个语言中使用的各种不同类型。它还包含

既然
函数
是一个类,而类是一个对象,那么
函数
的类型是什么,即它是什么的实例

正如评论所建议的那样

>>> type(function)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'function' is not defined

函数是Python中最简单的可调用对象。

内置模块存储整个语言中使用的各种不同类型。它还包含与实例方法相对应的:

>>> type(builtins)
<class 'module'>
>>> type(module)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'module' is not defined
在解释器中调用
类型(Foo.bar)
时,输出是
,但这并不一定意味着类的名称是
'function'
,而只是类的表示形式(
\urepr\uuu
):


这意味着该类型是它自己的类(即
type.\uuuuu class\uuuuu
指向自身)。这是在实现级别实现的。

您是否尝试了
类型(type(OptimizedRectangle.get_area))
?这应该是显而易见的<代码>类型(…)返回一个类型。因此
type(type(…)
将是
type
。FunctionType:
function
module
type
的实例。您会得到
namererror
s,因为
function
module
没有在任何地方定义。将类命名为
function
module
并不意味着它实际上可以通过名称查找
函数或
模块
。这是两种不同的名称,仅通过约定和
语句的默认行为链接。请注意
类型
模块并不特殊。它不是任何
类型的位置。无论实现了什么
类型,在那里定义的名称都不是“真实”名称或任何东西。例如,要定义
types.FunctionType
types.py
只需定义一个函数
\u f
并设置
FunctionType=type(\u f)
。谢谢。“内置模块类型存储在整个语言中使用的所有不同类型。”既然模块
类型
中定义的类型在整个语言中使用,为什么它们不在语言中定义为内置类型(如
列表
int
),但是在标准库中的模块
类型中?@Tim所有可以在Python中使用而无需额外导入的对象都存储在模块
\uuuuuuuuuu内置项中。这些对象构成了语言的“基础”,并且可能经常使用(例如转换为
int
list
)。但是,对于函数的定义,有
def
语句,即无需参考特定类型。同样,对于duck类型,用户可能会测试
callable(…)
而不是与
FunctionType
进行比较。存储在
types
中的对象提供了一个标准,用于比较特定对象的特定类型(无论何时需要)。谢谢@客人。“所有可以在Python中使用而无需额外导入的对象都存储在模块
\uuuuuu内置\uuuu
”中。您的意思是说在Python3中,所有内置类型,如
int
dict
都是从模块
内置导入的吗?它们不是语言的内置部分,而不是模块吗?@Tim准确地说,模块的名称是,但通过将其绑定到名称
\uuuuuuu内置项\uuuuuuuuu
(至少对于CPython而言)可以使用它。内置类型是用解释器的语言实现的(例如,C代表CPython),并通过这个
内置模块提供。这使得语言更加独立,因为这些内置对象可以被视为常规Python对象(与用户定义对象的方式相同)。否则,有关内置的信息必须存储在编译器的某个地方。
>>> type(type(OptimizedRectangle.get_area))
<class 'type'>
>>> type(builtins)
<class 'module'>
>>> type(module)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'module' is not defined
>>> class Foo:
...     def bar(self):
...         pass
>>> type(Foo.bar) is types.FunctionType
True
>>> type(types.FunctionType).__repr__(type(Foo.bar))
"<class 'function'>"
>>> type(type) is type
True