W3docs

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

python— editable, runs on the server

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:

OperatoreSignificatoEsempioRisultato
==uguale a5 == 5True
!=diverso da5 != 3True
<minore di3 < 5True
>maggiore di5 > 3True
<=minore o uguale5 <= 5True
>=maggiore o uguale4 >= 5False

Python compare two integers

python— editable, runs on the server

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

python— editable, runs on the server

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:

ValoreTipo
Falsebool
0int
0.0float
"" o ''str (string vuota)
[]list (lista vuota)
{}dict (dict vuoto)
()tuple (tuple vuota)
set()set (set vuoto)
NoneNoneType

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

python— editable, runs on the server

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 truthy

Nota 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) # False

or

Restituisce True se almeno uno degli operandi è vero:

print(True or False)   # True
print(False or False)  # False
print(True or True)    # True

not

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 passed

Questo è 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.

  • I boolean in Python sono True e False — sempre con la prima lettera maiuscola.
  • Ogni valore in Python è truthy o falsy. I valori falsy includono 0, "", [], {}, () e None.
  • Usa bool() per convertire esplicitamente un valore nel suo equivalente boolean.
  • Combina le condizioni con and, or e not. Python le valuta in modo lazy tramite le regole short-circuit.
  • Usa is None (non == None) quando controlli la presenza di None.
  • Poiché bool è una sottoclasse di int, True + True è uguale a 2 — 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.

Esercitati

Pratica
Which of the following values are falsy in Python?
Which of the following values are falsy in Python?
Was this page helpful?