2009-09-22 53 views
21

我一直在寻找的源代码给hasattr内置功能,发现一对夫妇引起了我的兴趣线:为什么Python在False和True上保持引用计数?

Py_INCREF(Py_False); 
return Py_False; 

... 

Py_INCREF(Py_True); 
return Py_True; 

是不是Py_FalsePy_True全局值?出于纯粹的好奇心,为什么Python会为这些变量保留引用计数?

+0

-1:这是如何解决你现在有的任何编程问题? – 2009-09-22 14:42:31

+9

@ S.Lott因为当遇到问题时,必须涉及特定的具体编程问题。 – Triptych 2009-09-22 14:44:39

+17

我目前有问题,我不明白需要增加Py_True和Py_False上的引用计数。 – 2009-09-22 14:44:50

回答

21

这是使所有的对象处理均匀。如果我正在编写处理函数返回值的C代码,那么我必须增加和减少该对象的引用计数。如果函数返回True,我不想检查它是否是那些特殊对象之一,以知道是否操纵其引用计数。我可以完全对待所有对象。

通过处理True和False(和None,btw)与所有其他对象相同,C代码在整个过程中更加简单。

+0

另外:T F和None实际上是物体。他们只是没有任何方法。 http://docs.python.org/c-api/bool.html – Pod 2009-09-22 14:48:52

+1

他们技术上有方法。每个对象都有方法。 – ironfroggy 2009-09-22 15:07:56

+4

len(dir(True))是54 - 方块*全*方法。它们都是特殊的(双下划线命名的)。 – 2009-09-22 15:22:12

相关问题