Domanda

In Python 2.6.4:

>> ''>0
True

Perché?

È stato utile?

Soluzione

La motivazione disegno originale per permettere di ordine-confronto di oggetti arbitrari è stato quello di consentire l'ordinamento delle liste eterogenee - utilmente, che avrebbe messo tutte le stringhe una accanto all'altra in ordine alfabetico, e tutti i numeri uno accanto all'altro in ordine numerico, anche se quale dei due blocchi è venuto prima non era garantita dal linguaggio. Ad esempio, questo ha permesso di ottenere oggetti unici solo in ogni lista (anche uno con componenti non hashable) in tempo O(N log N) caso peggiore

Nel corso degli anni, questo accordo pragmatico eroso. La prima crepa è venuto quando la capacità di numeri complessi di ordine-confronto è stato portato via, un bel paio di versioni fa. Improvvisamente, la possibilità di ordinare qualsiasi è scomparso: lo ha fatto non si applica più se la lista conteneva i numeri complessi, eventualmente insieme ad oggetti di altri tipi. Poi Guido iniziato antipatia liste eterogenee, più in generale, e quindi cominciato a pensare che non è davvero questione se tali liste potrebbero essere utilmente ordinati o no ... perché non dovrebbero esistere tali elenchi, in primo luogo, secondo il suo nuovo modo di pensare. Non ha fatto nulla per impedire loro, ma non era incline ad accettare compromessi di sostenerli entrambi.

Si noti che entrambi i cambiamenti spostare l'equilibrio un po 'lontano dalla "praticità batte purezza" voce dello Zen di Python (che è stato scritto in precedenza, quando ancora i numeri complessi ancora potrebbero essere fine-a confronto ;-) -. un po 'più di purezza, un po' meno praticità

Tuttavia la capacità di ordini confrontare due oggetti arbitrari (fintantoché non era un numero complesso ;-) rimasta per lungo tempo, perché intorno a quel tempo stesso Guido iniziato veramente insistere sul mantenimento forte compatibilità all'indietro (un cambiamento che di < strong> sia pratica e pura; -).

Quindi, è solo in Python 3, che esplicitamente e deliberatamente rimosso il vincolo di compatibilità all'indietro forti per consentire ad alcuni miglioramenti a lungo desiderati ma all'indietro incompatibili (soprattutto semplificazioni e rimozione di modo ridondante obsoleto per eseguire alcuni compiti), quell'ordine confronto di istanze di tipo diverso è diventato un errore.

Quindi questo trattato storico e filosofico è fondamentalmente l'unico modo per veramente rispondere al vostro "perché" domanda ...! : -)

Altri suggerimenti

https://docs.python.org/2.7/tutorial/ datastructures.html # id1

  

Si noti che confronto di oggetti di tipi diversi è legale. Il risultato   è deterministico ma arbitrario: i tipi sono ordinate per il loro nome.   Così, una lista è sempre più piccolo di una stringa, una stringa è sempre   più piccolo di una tupla, ecc [1] Tipi numerici eterogenei vengono confrontati   secondo il loro valore numerico, così 0 è uguale a 0.0, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top