2012-07-19 12 views

risposta

12

Poiché Python 2.x ha provato a rendere disponibile il confronto tra oggetti di tipi diversi (anche se non hanno senso).

è stato risolto in Python 3:

>>> object() > 0 
Traceback (most recent call last): 
    File "<pyshell#320>", line 1, in <module> 
    object() > 0 
TypeError: unorderable types: object() > int() 

L'ordine utilizzato in Python 2.x:

None < Numbers < [Other types in alphabetical order] 

numeri sono: int, bool e float ma non complex perché non possono Da confrontare

Inoltre, oggetti da classi di vecchio stile (denominati oggetti instance) stare tra None e Numbers per qualche strano motivo.

+2

È vero che, da una prospettiva ampia, il confronto tra diversi tipi di oggetti non ha senso, ma è bello poter ordinare tipi eterogenei e ottenere un ordinamento coerente. –

+1

@JBernardo Potresti aggiungere un collegamento a una sezione correlata nella documentazione di Python2.x? – satoru

+1

@ Satoru.Logic Ecco il [collegamento] (http://docs.python.org/library/stdtypes.html#comparisons). Leggi la casella "Dettagli implementazione CPython" – JBernardo

2

Si sta confrontando l'indirizzo di l'oggetto. Se conosci C/C++, questa è l'aritmetica del puntatore.

>>> object() < object() 
True 
>>> object() > object() 
False 

Nel primo esempio, il primo oggetto() avviene da assegnare precedenza in memoria rispetto al secondo, quindi è 'inferiore' altro.

Indipendentemente da ciò, non si dovrebbero comunque confrontare indicatori come questo. :)

+0

Puoi confermarlo usando la funzione 'id' (http://docs.python.org/library/functions.html#id). vale a dire id (object()) restituirà un numero intero. Questo è il valore utilizzato per il confronto a zero. – stderr

+2

Lo fa per due oggetti dello stesso tipo che non hanno un confronto definito, ma per oggetti di tipi diversi, la risposta di JBernardo è corretta. –

Problemi correlati