2009-09-22 29 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

相關問題