In [32]: object() > 0
Out[32]: True
In effetti, è maggiore di qualsiasi numero intero che ho provato.Perché `object()> 0` True in Python?
In [32]: object() > 0
Out[32]: True
In effetti, è maggiore di qualsiasi numero intero che ho provato.Perché `object()> 0` True in Python?
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.
È 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. –
@JBernardo Potresti aggiungere un collegamento a una sezione correlata nella documentazione di Python2.x? – satoru
@ Satoru.Logic Ecco il [collegamento] (http://docs.python.org/library/stdtypes.html#comparisons). Leggi la casella "Dettagli implementazione CPython" – JBernardo
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. :)
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
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. –
cosa ti aspetti? pari? – Takahiro
@ eric.f Errore, ovviamente. – satoru