在尝试查看符号是否为函数之前,Python是否假设符号是一种类型?

Ray*_*oal 6 python

在Python中,符号int既可以用作类型,也可以用作内置函数.但是当我int在REPL中使用或询问它的类型时,REPL告诉我它是一种类型.

>>> int
<type 'int'>
>>> type(int)
<type 'type'>
Run Code Online (Sandbox Code Playgroud)

这很好,但int也是一个内置函数:它在Python文档中的内置函数表中列出.

其他内置函数在REPL中报告如下:

>>> abs
<built-in function abs>
>>> type(abs)
<type 'builtin_function_or_method'>
Run Code Online (Sandbox Code Playgroud)

但我不能type告诉我这个int.现在显然我可以使用int作为一个功能,如果我想(抱歉使用map而不是理解,我只是想说明一点):

>>> map(int, ["4", "2"])
[4, 2]
Run Code Online (Sandbox Code Playgroud)

因此Python知道使用该功能.但为什么type选择功能上的类型?函数定义中的type任何内容都没有预料到这一点.然后作为后续行动,这个表达的含义是什么:

id(int)
Run Code Online (Sandbox Code Playgroud)

这给了我id类型或功能.我期待前者.现在,如果它是前者,我将如何获得内置函数的id int

NPE*_*NPE 4

只有一种东西叫做int,也只有一种东西叫做abs

区别在于,它int是一个类,而abs它是一个函数。然而,两者都是可调用的。当您调用 时int(42),它会调用int类的构造函数,返回类的实例int

这与以下内容并没有太大区别:

class Int(object):

  def __init__(self, init_val=0):
    self.val = init_val

obj = Int(42)
print Int, type(Int), obj, type(obj)
Run Code Online (Sandbox Code Playgroud)

这里,Int是可调用的,并且可用于构造类的实例。

一旦你意识到这一点,剩下的就会水到渠成。