Python-it.org forum # share your knowledge! ;)
Luglio 30, 2010, 05:40 *
Benvenuto! Accedi o registrati.
Hai dimenticato l'e-mail di attivazione?

Accesso con nome utente, password e durata della sessione
Notizie: [15/06/10] il conteggio dei messaggi nelle sezioni non tecniche del forum è stato disabilitato
 
   Home   Guida Regolamento Ricerca Accedi Registrati Python-it.org Doc Chat  
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 2248 volte)
0 utenti e 1 Utente non registrato stanno visualizzando questa discussione.
Markon
moderatore
python sapiens sapiens
*

Livello reputazione: 0
Markon non ha alcuna influenza
Scollegato Scollegato

Messaggi: 3518



Mostra profilo WWW
« inserito:: Luglio 21, 2008, 09: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

Pygame NON è un videogioco.
Python-it.org forum
« inserito:: Luglio 21, 2008, 09:47 »

 Registrato
gennaro
moderatore
python sapiens
*

Livello reputazione: 0
gennaro non ha alcuna influenza
Scollegato Scollegato

Messaggi: 595



Mostra profilo
« Risposta #1 inserito:: Luglio 21, 2008, 11: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
*

Livello reputazione: 0
Markon non ha alcuna influenza
Scollegato Scollegato

Messaggi: 3518



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

ohhh!

Scusa non doveva stampare "Markon" ?

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

Registrato

Pygame NON è un videogioco.
Rev
python neanderthalensis
****

Livello reputazione: 0
Rev non ha alcuna influenza
Scollegato Scollegato

Messaggi: 386



Mostra profilo
« Risposta #3 inserito:: Luglio 21, 2008, 16: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
*

Livello reputazione: 0
gennaro non ha alcuna influenza
Scollegato Scollegato

Messaggi: 595



Mostra profilo
« Risposta #4 inserito:: Luglio 21, 2008, 16: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
*

Livello reputazione: 0
Markon non ha alcuna influenza
Scollegato Scollegato

Messaggi: 3518



Mostra profilo WWW
« Risposta #5 inserito:: Luglio 21, 2008, 16: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

Pygame NON è un videogioco.
preben
python erectus
***

Livello reputazione: 0
preben non ha alcuna influenza
Scollegato Scollegato

Messaggi: 147



Mostra profilo
« Risposta #6 inserito:: Luglio 21, 2008, 22: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
****

Livello reputazione: 0
Flame_Alchemist non ha alcuna influenza
Scollegato Scollegato

Messaggi: 498



Mostra profilo WWW
« Risposta #7 inserito:: Luglio 21, 2008, 22: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
***

Livello reputazione: 0
moaiamorfo non ha alcuna influenza
Scollegato Scollegato

Messaggi: 768


premitore di tasti e muovitore di mouse


Mostra profilo WWW
« Risposta #8 inserito:: Luglio 21, 2008, 23: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
Sabba
python neanderthalensis
****

Livello reputazione: 0
Sabba non ha alcuna influenza
Scollegato Scollegato

Messaggi: 356



Mostra profilo
« Risposta #9 inserito:: Luglio 22, 2008, 11: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
*

Livello reputazione: 0
Markon non ha alcuna influenza
Scollegato Scollegato

Messaggi: 3518



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

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

Ciao wink
Registrato

Pygame NON è un videogioco.
Rev
python neanderthalensis
****

Livello reputazione: 0
Rev non ha alcuna influenza
Scollegato Scollegato

Messaggi: 386



Mostra profilo
« Risposta #11 inserito:: Luglio 22, 2008, 20: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, 20:51 da Rev » Registrato
Markon
moderatore
python sapiens sapiens
*

Livello reputazione: 0
Markon non ha alcuna influenza
Scollegato Scollegato

Messaggi: 3518



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

Sì è vero, lo trovo molto molto Pythonico!

Guido è sempre un mostro ahahah
Registrato

Pygame NON è un videogioco.
Python-it.org forum
   

 Registrato
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!