2010-02-22 2 views
5

Penso che se ho capito bene, a <> b è esattamente la stessa cosa funzionalmente come a != b, e in Python not a == b, ma c'è motivo di usare <> sulle altre versioni? So che un errore comune per i nuovi arrivati ​​Python è pensare che not a is b è la stessa di a != b o not a == b.Python (o programmazione generale). Perché usare <> invece di! = E ci sono dei rischi?

  1. Do equivoci simili si verificano con <>, o è esattamente la stessa funzionalmente?
  2. costa di più nella memoria, processore, ecc
+0

@ S.Lott E 'stato votato non è vero? Perché sei così ostile. Guarda, Alex Martelli, un esperto che ha scritto libri pubblicati di successo ha avuto il tempo di rispondere. – orokusaki

risposta

15

<> in Python 2 è un sinonimo esatto per != - alcun motivo per usarlo, nessuno svantaggio sia eccetto l'eterogeneità gratuita (un problema di stile) . E 'stato a lungo scoraggiato, ed ora è stato rimosso in Python 3.

+1

Ah, sono entrato in 3 è una ragione abbastanza buona per me. Se a Guido non piacesse, io neanche :) (anche se presumo che ci sia supporto per questo in 2 o 3). – orokusaki

+1

Si possono trovare da soli presso il nuovo Python Translation Party: http://www.pythontranslationparty.appspot.com/6002/ Si corre il codice successivamente attraverso 2to3 e 3to2, cercando di trovare l'equilibrio. – jcdyer

+0

@jcd grazie. Questo è uno strumento ingegnoso. – orokusaki

0

non si dovrebbe usare <> in python.

+7

Questa è una risposta terribile. Non fornisce dettagli, non si spiega da sé ed è moderatamente scortese. – Sean

+0

@Sean: questa domanda non ha bisogno di spiegazioni, '<>' era obsoleto per ** 10 anni **. È chiaramente indicato in ogni versione dei documenti Python che risalgono a Python 2.0. Non c'è bisogno di preoccuparsi delle differenze che potrebbe avere con l'operatore '! ='. Non usarlo: nessun problema da discutere. – SilentGhost

+2

@ SilentGhost: se non pensi che ci sia qualcosa da discutere, semplicemente non pubblicare una "risposta". Avresti potuto facilmente giustificare la tua posizione, ma invece ti chiedi perché hai downvoted quando la tua risposta semplicemente non risponde affatto alla domanda. –

8

Solo una nota saccente: l'operatore <> è in un certo senso misnamed (misdenoted?). a <> b potrebbe naturalmente essere interpretato nel senso a < b or a > b (valutazione a e b sola volta, ovviamente), ma dato che non tutti gli ordinamenti sono ordinamenti totali, questo non corrisponde alla semantica. Ad esempio, 2.0 != float('nan') è vero, ma 2.0 < float('nan') or 2.0 > float('nan') è falso.

L'operatore != non è soggetta a tale possibile interpretazione.

Per un'interpretazione interessante (con poesia!) Sulla decisione di eliminare <> per Python 3.x, vedere Requiem for an operator.

+0

votato, era quello che stavo cercando di dire nella mia risposta. L'ho cancellato. – Kaltezar

+0

In realtà stai dicendo che '<>' è in qualche modo correlato a '<' or '>'? Eppure, non si sostiene che '>>' o '<<' è * anche * relativo a '>' o '<'? Perché una coppia di caratteri ('<>') è magicamente correlata a '<' or '>', tuttavia altre coppie di caratteri ('<<','>>') non sono magicamente correlati? Non capisco quello che stai dicendo. Puoi chiarire questo? –

+2

No, non lo sono; ma è un'interpretazione abbastanza plausibile (errata) e si adatta alle definizioni di '<=' and '> ='. Non vedo lo stesso rischio di errata interpretazione con '<<' and '>>', ma forse sono solo io. Allo stesso modo, mi sembra di ricordare che IEEE 754 (la versione 2008) fornisce '<>?' Come possibile ortografia per l'operazione non uguale, per rendere il punto che include il caso 'non ordinato' e i casi "minore di" e "maggiore di". –