Skip to content

Espressioni condizionali in Python

Python

Python ha espressioni condizionali (a volte chiamate “operatore ternario”). Puoi scrivere un’operazione come un’istruzione se in una riga con espressioni condizionali.

In questo articolo vengono descritti i seguenti contenuti.

  • Nozioni di base sulle espressioni condizionali
  • se … elif … altro … da espressioni condizionali
  • Elenca le comprensioni e le espressioni condizionali
  • Espressioni Lambda ed espressioni condizionali

Vedere il seguente articolo per l’istruzione se.

Nozioni di base sulle espressioni condizionali

In Python, l’espressione condizionale è scritta come segue.

La condizione viene valutata per prima. Se la condizione è True, viene valutato X e viene restituito il suo valore, e se la condizione è False, viene valutato Y e viene restituito il suo valore.

Se vuoi cambiare il valore in base alla condizione, descrivi semplicemente ogni valore così com’è.

a = 1
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# odd

a = 2
result = 'even' if a % 2 == 0 else 'odd'
print(result)
# even

Se vuoi cambiare l’operazione in base alle condizioni, descrivi ogni espressione.

a = 1
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 3

a = 2
result = a * 2 if a % 2 == 0 else a * 3
print(result)
# 4

È possibile anche un’espressione che non riporta un valore (un’espressione che richiede None). Entrambe le espressioni vengono valutate ed eseguite a seconda della condizione.

a = 1
print('even') if a % 2 == 0 else print('odd')
# odd

L’esempio sopra è equivalente al codice seguente scritto nell’istruzione if.

a = 1

if a % 2 == 0:
    print('even')
else:
    print('odd')
# odd

Puoi anche concatenare più espressioni condizionali con ee o.

a = -2
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# negative and even

a = -1
result = 'negative and even' if a < 0 and a % 2 == 0 else 'positive or odd'
print(result)
# positive or odd

se … elif … altro … da espressioni condizionali

Combinando le espressioni condizionali, puoi scrivere un’operazione come if … elif … else … in una riga.

X if condition1 else Y if condition2 else Z

Tuttavia, è difficile da capire, quindi potrebbe essere meglio non utilizzare spesso.

a = 2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# positive

a = 0
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# zero

a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative

Sono possibili le due interpretazioni seguenti, ma viene elaborata come la prima (1).

1. X if condition1 else (Y if condition2 else Z)
2. (X if condition1 else Y) if condition2 else Z

Nel codice di esempio riportato di seguito, la prima espressione è considerata la seconda anziché la terza.

a = -2
result = 'negative' if a < 0 else 'positive' if a > 0 else 'zero'
print(result)
# negative

result = 'negative' if a < 0 else ('positive' if a > 0 else 'zero')
print(result)
# negative

result = ('negative' if a < 0 else 'positive') if a > 0 else 'zero'
print(result)
# zero

Elenca le comprensioni e le espressioni condizionali

Utilizzando le espressioni condizionali nelle comprensioni degli elenchi, l’operazione può essere applicata agli elementi dell’elenco dalla condizione.

l = ['even' if i % 2 == 0 else i for i in range(10)]
print(l)
# ['even', 1, 'even', 3, 'even', 5, 'even', 7, 'even', 9]
l = [i * 10 if i % 2 == 0 else i for i in range(10)]
print(l)
# [0, 1, 20, 3, 40, 5, 60, 7, 80, 9]

Vedere il seguente articolo per i dettagli sulla comprensione degli elenchi.

Espressioni Lambda ed espressioni condizionali

Le espressioni condizionali sono utili anche quando si desidera applicare operazioni come l’istruzione if nelle espressioni lambda.

get_odd_even = lambda x: 'even' if x % 2 == 0 else 'odd'

print(get_odd_even(1))
# odd

print(get_odd_even(2))
# even

Nell’esempio precedente, il nome è assegnato all’espressione lambda per comodità, ma non è consigliato in PEP8.

Vedere l’articolo seguente per i dettagli sulle espressioni lambda.