2009-09-22 6 views
21

Stavo guardando il codice sorgente per la funzione built-in hasattr e ho notato un paio di righe che suscitato il mio interesse:Perché Python mantiene un conteggio dei riferimenti su False e True?

Py_INCREF(Py_False); 
return Py_False; 

... 

Py_INCREF(Py_True); 
return Py_True; 

Sono non Py_False e Py_True valori globali? Solo per pura curiosità, perché Python mantiene un conteggio di riferimento per queste variabili?

+0

-1: in che modo questo risolve eventuali problemi di programmazione attualmente disponibili? –

+9

@ S.Lott da quando qui le domande devono riguardare particolari problemi di programmazione concreti. – Triptych

+17

Attualmente ho il problema che non capisco la necessità di incrementare i conteggi di riferimento su Py_True e Py_False. –

risposta

21

È per rendere uniforme la gestione di tutti gli oggetti. Se sto scrivendo un codice C che gestisce un valore di ritorno da una funzione, devo incrementare e decrementare il conteggio dei riferimenti su quell'oggetto. Se la funzione restituisce True, non voglio dover controllare se è uno di quegli oggetti speciali per sapere se manipolare il suo conteggio dei riferimenti. Posso trattare tutti gli oggetti in modo identico.

Trattando True e False (e None, btw) come tutti gli altri oggetti, il codice C è molto più semplice.

+0

Inoltre: T F e None sono in realtà oggetti. Semplicemente non hanno alcun metodo. http://docs.python.org/c-api/bool.html – Pod

+1

tecnicamente hanno metodi. Ogni oggetto ha metodi. – ironfroggy

+4

len (dir (True)) è 54 - pieno * pieno * di metodi. Sono tutti speciali (quelli con doppio trattino basso). –

Problemi correlati