Python-it.org forum # share your knowledge! ;)
Febbraio 09, 2010, 07:44 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizie: fusione python.it e python-it.org: http://www.python-it.org/forum/index.php?topic=2347.0
 
   Home   Guida Regolamento Ricerca Accedi Registrati Python-it.org Doc  
Apri il forum in una pagina a parte - È possibile fornire/richiedere supporto anche presso i canali IRC #python su Azzurra e #python.it su Freenode

Pagine: [1]   Vai giù
  Stampa  
Autore Discussione: Perchè non esiste l'operatore ternario (Condition ? Val1 : Val2) in Python?  (Letto 1793 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
Markon
moderatore
python sapiens sapiens
*
Scollegato Scollegato

Messaggi: 2856



Mostra profilo WWW
« inserito:: Luglio 21, 2008, 08:47 »

Ciao a tutti!

Vorrei sapere la vostra opinione su questo argomento:

perchè in Python non esiste l'operatore ternario "? :" ?

Per intenderci l'operatore ternario è un operatore condizionale:

Se questa condizione è vera ? RitornaQuesto : AltrimentiQuesto

So bene che può essere simulato in questo modo:

>>> True and Valore1 or Valore2
>>>Valore1

o

>>> False and Valore1 or Valore2
>>> Valore2

Generalizzando si avrebbe:

[ValoreSeTrue, ValoreSeFalse][bool(Condizione)-1]

Però dico: perchè non l'operatore ternario famoso in C e C++ ?

A quanto pare una risposta viene dal PEP 308:

Citazione
Molti linguaggi derivati dal C usano la sintassi:

        <condition> ? <expression1> : <expression2>

    Eric Raymond l'ha anche implementato. Il BDFL l'ha rifiutato per
    alcune ragioni: i due punti sono già usati molto in Python ( anche
    se non è davvero ambiguo, perchè il punto interrogativo richiede
    i due punti corrispondenti); inoltre per chi non ha usato linguaggi derivati dal C
    è di difficile comprensione.

Condividete l'idea di G. Van Rossum?

O sentite la mancanza dell'operatore ternario? ahahah


Registrato

My Guitar wants to Kill you Mama!
gennaro
moderatore
python sapiens
*
Scollegato Scollegato

Messaggi: 595



Mostra profilo
« Risposta #1 inserito:: Luglio 21, 2008, 10:10 »

Guido ha ragione... è una sintassi troppo estranea al linguaggio python... e poi c'è gia questo:

>>> "gennaro" if ("Markon" == "spammone") else "Markon"
'gennaro'

 ahahah
Registrato
Markon
moderatore
python sapiens sapiens
*
Scollegato Scollegato

Messaggi: 2856



Mostra profilo WWW
« Risposta #2 inserito:: Luglio 21, 2008, 14:04 »

ohhh!

Scusa non doveva stampare "Markon" ?

So di essere uno spammone, ma fammi capire l'esempio! XD

Registrato

My Guitar wants to Kill you Mama!
Rev
python neanderthalensis
****
Scollegato Scollegato

Messaggi: 386



Mostra profilo
« Risposta #3 inserito:: Luglio 21, 2008, 15:18 »

Guido ha ragione... è una sintassi troppo estranea al linguaggio python... e poi c'è gia questo:

>>> "gennaro" if ("Markon" == "spammone") else "Markon"
'gennaro'

 ahahah

Ritorna "gennaro" se la condizione è vera altrimenti Markon
Diremo di aggiungere una variabile in Python di nome Markon e valore Spammone per il prossimo Python xD
Registrato
gennaro
moderatore
python sapiens
*
Scollegato Scollegato

Messaggi: 595



Mostra profilo
« Risposta #4 inserito:: Luglio 21, 2008, 15:26 »

Beh si effettivamente stampa 'Markon'... ma non ho resistito alla tentazione... ahahah  Questa sintassi se non sbaglio è stata introdotta con python 2.5 e secondo me sotituisce degnamente "? :" pur rimanendo molto pythonica... e forse (dico forse) l'hanno scelta anche perchè era quella più facile da implementare.
Registrato
Markon
moderatore
python sapiens sapiens
*
Scollegato Scollegato

Messaggi: 2856



Mostra profilo WWW
« Risposta #5 inserito:: Luglio 21, 2008, 15:51 »

Citazione
Beh si effettivamente stampa 'Markon'... ma non ho resistito alla tentazione...

Ecco! E io sarei spammone?! ahahah

Comunque ho capito.. dunque per voi è meglio così senza "? : " ?

smile
Registrato

My Guitar wants to Kill you Mama!
preben
python erectus
***
Scollegato Scollegato

Messaggi: 147



Mostra profilo
« Risposta #6 inserito:: Luglio 21, 2008, 21:17 »

Secondo me sarabbe utile se ci fosse (anche se non indispensabile).
Sarà perchè ho iniziato con java e c.
Ciao!
Registrato
Flame_Alchemist
python neanderthalensis
****
Scollegato Scollegato

Messaggi: 495



Mostra profilo WWW
« Risposta #7 inserito:: Luglio 21, 2008, 21:23 »

Citazione
dunque per voi è meglio così senza "? : " ?
decisamente. [var] ? [value1] : [value2] non rispetta nemmeno un po' la sintassi del python, principalmente perché i due punti introducono un pezzo di codice indentato. Senza contare che così è molto più leggibile, è come un blocco if-else espresso in una riga, mantenendo chiarezza.
Registrato

moaiamorfo
amministratore
python sapiens
***
Scollegato Scollegato

Messaggi: 700


premitore di tasti e muovitore di mouse


Mostra profilo WWW
« Risposta #8 inserito:: Luglio 21, 2008, 22:16 »

molto interessante (il thread merita un voto positivo),

in effetti anch'io m'ero sempre chiesto il perché dell'assenza di tale operatore, che in altri contesti ho trovato sempre molto comodo: grazie a gennaro (san?) ora ne so una in più. wink

saluti
Registrato

Python-it.org # il punto di riferimento italiano per gli appassionati di Python
LUGania - GNU/Linux User Group di Matera e provincia
membro di AZI[/
Sabba
python neanderthalensis
****
Scollegato Scollegato

Messaggi: 346



Mostra profilo
« Risposta #9 inserito:: Luglio 22, 2008, 10:34 »

Ma quello proposto da Gennaro *E'* l'operatore ternario di python ed è stato introdotto proprio per quello.
In pratica l'operatore ternario è stato chiesto per anni, alla fine Guido ha ceduto ma solo a patto di renderlo più pythonico, e mi sembra che il risultato sia ottimo anche in fatto di leggibilità
Registrato
Markon
moderatore
python sapiens sapiens
*
Scollegato Scollegato

Messaggi: 2856



Mostra profilo WWW
« Risposta #10 inserito:: Luglio 22, 2008, 17:50 »

E' vero, è stato introdotto nella versione Python 2.5
http://docs.python.org/whatsnew/pep-308.html

Ciao wink
Registrato

My Guitar wants to Kill you Mama!
Rev
python neanderthalensis
****
Scollegato Scollegato

Messaggi: 386



Mostra profilo
« Risposta #11 inserito:: Luglio 22, 2008, 19:49 »

Sono andato a supposizione perché infatti io uso la 2.4.2 e non lo posso provare cmq dopo aver letto il link di markon posso dire che a me piace più in questo modo che ? :
« Ultima modifica: Luglio 22, 2008, 19:51 da Rev » Registrato
Markon
moderatore
python sapiens sapiens
*
Scollegato Scollegato

Messaggi: 2856



Mostra profilo WWW
« Risposta #12 inserito:: Luglio 22, 2008, 20:46 »

Sì è vero, lo trovo molto molto Pythonico!

Guido è sempre un mostro ahahah
Registrato

My Guitar wants to Kill you Mama!
Pagine: [1]   Vai su
  Stampa  
 
Vai a:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.11 | SMF © 2006-2009, Simple Machines LLC XHTML 1.0 valido! CSS valido!