区别在于内置输入是C编译的代码描述符,而用户定义的函数代表它的代码
descriptors.有关详细信息,请参阅
source.
此外,虽然内置函数及其方法是静态分配的数据结构,但用户定义的数据结构的内存是以动态方式分配的.甚至大小也不同:描述符的大小在内置函数之间以及类似的用户定义中是相等的,参考C源(上面的链接):
>>> sys.getsizeof(list.append)
72 # built-in
>>> sys.getsizeof(dir)
72 # built-in
>>> sys.getsizeof(A.__init__)
80 # class/instance method
>>> sys.getsizeof(lambda x: x)
120 # static function
所以这些东西看起来不同,居住在不同的地方,表现不同.没有必要给他们相同的名字.
我想为classmethod添加错过的编译模拟,classmethod_descriptor,
>>> type(float.__dict__['fromhex'])
以及其他一些有趣的类型:
>>> type(A.__init__)
>>> type(A.__dict__['__dict__'])
看到: