Capire i Boolean in Python
Scopri i boolean in Python: valori True/False, regole truthy e falsy, conversione con bool(), operatori logici e problemi comuni con esempi chiari.
Un boolean è un tipo di dato con esattamente due valori possibili: True o False. I boolean in Python controllano ogni decisione che il tuo codice prende — dalle istruzioni if ai cicli while fino alle list comprehension. Questo capitolo spiega come funzionano i boolean, come Python valuta qualsiasi valore come truthy o falsy, e i pattern pratici che userai ogni giorno.
Cosa sono i Boolean in Python?
In Python, True e False sono parole chiave (con la prima lettera maiuscola). Appartengono al tipo built-in bool, che è una sottoclasse di int. Questo significa che True si comporta come 1 e False si comporta come 0 nei contesti aritmetici.
print(type(True)) # <class 'bool'>
print(type(False)) # <class 'bool'>
print(True == 1) # True
print(False == 0) # True
print(True + True) # 2 (bool is a subclass of int)L'ultima riga — True + True uguale a 2 — sorprende molti principianti. È Python valido e occasionalmente utile (ad esempio, per contare quante condizioni in una lista sono vere), ma usare i boolean nell'aritmetica deve essere intenzionale e chiaramente commentato.
Creare Variabili Boolean
Puoi assegnare direttamente True o False a una variabile:
Python define boolean variable
Per convenzione, i nomi delle variabili boolean iniziano spesso con is_, has_, can_, o should_ per rendere chiaro il loro scopo a colpo d'occhio.
Boolean dagli Operatori di Confronto
Ogni operatore di confronto produce un risultato boolean:
| Operatore | Significato | Esempio | Risultato |
|---|---|---|---|
== | uguale a | 5 == 5 | True |
!= | diverso da | 5 != 3 | True |
< | minore di | 3 < 5 | True |
> | maggiore di | 5 > 3 | True |
<= | minore o uguale | 5 <= 5 | True |
>= | maggiore o uguale | 4 >= 5 | False |
Python compare two integers
Puoi memorizzare i risultati dei confronti in una variabile e riutilizzarli, il che rende leggibili le condizioni if complesse.
Usare i Boolean nelle Istruzioni Condizionali
I boolean sono il motore alla base delle decisioni if/else. Python valuta l'espressione dopo if ed esegue il blocco indentato solo quando il risultato è True:
Python compare two integers and print the result
Puoi anche usare direttamente una variabile boolean senza alcun operatore di confronto:
is_raining = True
if is_raining:
print("Bring an umbrella")
else:
print("Enjoy the sunshine")Usare if is_raining: è più Pythonico di if is_raining == True:. Quest'ultimo non aggiunge alcuna informazione ed è considerato un code smell.
Valori Truthy e Falsy
Python non richiede un valore effettivo True o False in un contesto boolean. Ogni oggetto è truthy (trattato come True) o falsy (trattato come False). Questo ti permette di scrivere condizioni concise senza confronti espliciti.
Valori falsy
I seguenti valori sono sempre falsy in Python:
| Valore | Tipo |
|---|---|
False | bool |
0 | int |
0.0 | float |
"" o '' | str (string vuota) |
[] | list (lista vuota) |
{} | dict (dict vuoto) |
() | tuple (tuple vuota) |
set() | set (set vuoto) |
None | NoneType |
Tutto il resto è truthy — inclusi i numeri diversi da zero, le string non vuote e le collezioni non vuote.
# All of these print "empty" because the values are falsy
for value in [0, 0.0, "", [], {}, (), None]:
if not value:
print(f"{repr(value)} is falsy")Valori truthy in pratica
name = input("Enter your name: ")
if name: # truthy if name is not an empty string
print(f"Hello, {name}!")
else:
print("No name provided.")
items = [1, 2, 3]
if items: # truthy if list is not empty
print(f"Processing {len(items)} items")Questo pattern — controllare direttamente una collezione invece di len(items) > 0 — è il modo idiomatico di scrivere Python.
Convertire Valori in Boolean con bool()
La funzione built-in bool() converte qualsiasi valore nel suo equivalente boolean, utile quando vuoi verificare se qualcosa è truthy o falsy:
Python casting into boolean
Altri esempi:
print(bool(0)) # False
print(bool(0.0)) # False
print(bool("")) # False
print(bool([])) # False
print(bool(None)) # False
print(bool(1)) # True
print(bool(-1)) # True
print(bool("hello")) # True
print(bool([0])) # True — list with one element is truthyNota che bool([0]) è True anche se il singolo elemento all'interno è falsy. Python controlla se il contenitore è vuoto, non i valori al suo interno.
Operatori Logici con i Boolean
Python fornisce tre operatori logici per combinare espressioni boolean. Consulta Python Operators per il riferimento completo agli operatori.
and
Restituisce True solo se entrambi gli operandi sono veri:
print(True and True) # True
print(True and False) # False
print(False and True) # False
print(False and False) # Falseor
Restituisce True se almeno uno degli operandi è vero:
print(True or False) # True
print(False or False) # False
print(True or True) # Truenot
Inverte il valore boolean:
print(not True) # False
print(not False) # True
print(not 0) # True (0 is falsy, so not 0 is True)
print(not "hi") # False ("hi" is truthy, so not "hi" is False)Valutazione short-circuit
Python valuta and e or in modo lazy — si ferma non appena il risultato è determinato. Questo si chiama valutazione short-circuit:
False and <anything>— Python non valuta mai il lato destro perché il risultato è giàFalse.True or <anything>— Python non valuta mai il lato destro perché il risultato è giàTrue.
Questo è importante quando il lato destro ha effetti collaterali o potrebbe sollevare un errore:
items = []
# Safe: the second condition is only evaluated if items is truthy
if items and items[0] > 10:
print("First item exceeds 10")Senza lo short-circuit, items[0] su una lista vuota solleverebbe un IndexError. Poiché items è falsy (lista vuota), Python salta del tutto il lato destro.
L'Operatore is vs. == con i Boolean
== verifica se due valori sono uguali. is verifica se due nomi si riferiscono allo stesso oggetto in memoria.
print(1 == True) # True (equal in value)
print(1 is True) # False (different objects)Usa sempre == (o affidati alla truthiness) quando confronti valori. Riserva is per i controlli di identità — più comunemente is None:
value = None
if value is None:
print("No value provided")Usare == None funziona, ma is None è la forma idiomatica e leggermente più veloce.
Contare con i Boolean
Poiché True == 1 e False == 0, puoi usare sum() per contare quanti elementi in una lista soddisfano una condizione:
scores = [85, 42, 91, 67, 55, 78]
passed = sum(score >= 60 for score in scores)
print(f"{passed} out of {len(scores)} students passed")
# 4 out of 6 students passedQuesto è più conciso di un ciclo con contatore manuale ed è un idioma comune in Python.
Errori Comuni
1. Confrontare esplicitamente con True/False
# Avoid
if is_valid == True:
...
# Prefer
if is_valid:
...2. Confondere = (assegnazione) con == (uguaglianza)
x = 5
if x = 5: # SyntaxError — use == for comparison
print("equal")3. Supporre che una lista vuota all'interno di una lista sia falsy
outer = [[]] # a list containing one empty list
if outer:
print("truthy") # This prints! outer has one element.La lista esterna ha un elemento (la lista vuota interna), quindi outer è truthy. Solo la lista interna outer[0] è falsy.
Riepilogo
- I boolean in Python sono
TrueeFalse— sempre con la prima lettera maiuscola. - Ogni valore in Python è truthy o falsy. I valori falsy includono
0,"",[],{},()eNone. - Usa
bool()per convertire esplicitamente un valore nel suo equivalente boolean. - Combina le condizioni con
and,orenot. Python le valuta in modo lazy tramite le regole short-circuit. - Usa
is None(non== None) quando controlli la presenza diNone. - Poiché
boolè una sottoclasse diint,True + Trueè uguale a2— comodo per contare.
Successivamente, scopri gli Operatori Python per vedere come gli operatori di confronto e logici producono i valori boolean trattati qui. Puoi anche esplorare come i boolean guidano il flusso del programma in Python If...Else.