/ / Uso delle condizioni nelle assegnazioni delle variabili in Python - python, assegnazione delle variabili

Utilizzo delle condizioni nelle assegnazioni delle variabili in Python - python, assegnazione delle variabili

Voglio usare le condizioni nell'assegnazione delle variabili in Python come il modo in cui lo faccio in C #.

myLang = lang=="en" ? "en" : lang=="ger" ? "de" : "fa";

ho trovato questa domanda che dice che Python ha questo tipo di assunzioni.

num1 = (20 if someBoolValue else num1)

Ma non riesco a capire come funziona nel mio caso. È possibile fare qualcosa del genere in Python?

risposte:

5 per risposta № 1

Sì, è possibile:

myLang = "en" if lang == "en" else "de" if lang == "ger" else "fa"

Le espressioni vere e false di una singola espressione condizionale sono solo più espressioni. Puoi mettere un'altra espressione condizionale in quel posto.

Se facilita la lettura, puoi mettere parentesi intorno alle espressioni per raggrupparle visivamente. Python non ha bisogno di questi, poiché l'espressione condizionale ha a precedenza dell'operatore molto bassa; solo lambda è più basso.

Con parentesi avrebbe letto:

myLang = "en" if lang == "en" else ("de" if lang == "ger" else "fa")

Ci sono modi migliori per mappare lang tuttavia a una stringa di due caratteri. Utilizzando un dizionario, ad esempio:

language_mapping = {"en": "en", "ger": "de"}
myLang = language_mapping.get(lang, "fa")

sarebbe di default a "fa" a meno che il lang il valore è nella mappatura, usando il dict.get() metodo.


3 per risposta № 2

Il problema con il fare questo nel codice è che è, beh, hardcoded.

langmap = {
"en": "en",
"ger": "ge"
}

...
myLang = langmap.get(lang, "fa")
...

Sebbene al tedesco sia data l'abbreviazione di "de" (per "deutsche"), non "ge".


1 per risposta № 3

Il codice C # è interpretato come:

myLang = lang=="en" ? "en" : (lang=="ger" ? "ge" : "fa");

Quindi fai lo stesso per Python:

myLang = "en" if lang=="en" else ("ge" if lang=="ger" else "fa")

o senza la parentesi:

myLang = "en" if lang=="en" else "ge" if lang=="ger" else "fa"