21

我正在查看 hasattr 内置函数的源代码,并注意到有几行引起了我的兴趣:

Py_INCREF(Py_False);
return Py_False;

...

Py_INCREF(Py_True);
return Py_True;

不是Py_False全球Py_True价值观吗?纯粹出于好奇,为什么 Python 保留这些变量的引用计数?

4

1 回答 1

22

这是为了使所有对象处理统一。如果我正在编写处理函数返回值的 C 代码,我必须增加和减少该对象的引用计数。如果函数返回 True,我不想检查它是否是那些特殊对象之一来知道是否要操纵它的引用计数。我可以一视同仁地对待所有对象。

通过将 True 和 False(以及 None,顺便说一句)与所有其他对象相同,C 代码在整个过程中变得更加简单。

于 2009-09-22T14:39:43.330 回答