我正在查看hasattr内置函数的源代码,并注意到引起我兴趣的几行:
Py_INCREF(Py_False);
return Py_False;
...
Py_INCREF(Py_True);
return Py_True;
不是Py_False
和Py_True
全局值吗?出于纯粹的好奇心,为什么Python保留这些变量的引用计数?
答案 0 :(得分:22)
使所有对象处理均匀。如果我正在编写处理函数返回值的C代码,我必须递增和递减该对象的引用计数。如果函数返回True,我不想检查它是否是那些特殊对象之一,知道是否操纵它的引用计数。我可以完全相同地处理所有对象。
通过将True和False(和None,btw)视为与所有其他对象相同,C代码在整个过程中更加简单。