在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?
只有一种东西叫做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是可调用的,并且可用于构造类的实例。
一旦你意识到这一点,剩下的就会水到渠成。