Skip to content

Operatori booleani in Python (and, or, not)

Python

Python fornisce operatori booleani e, o, no. Ad esempio, vengono utilizzati per gestire più condizioni nell’istruzione se.

In questo articolo vengono descritti i seguenti contenuti.

  • e (Congiunzione logica)
  • o (Disgiunzione logica)
  • non (negazione)
  • Precedenza di e, o, non operatori
  • Operazioni booleane per oggetti che non sono di tipo booleano
  • e,o NON richiama sempre il tipo bool
  • Valutazione del cortocircuito

Vedere l’articolo seguente per le operazioni bit per bit su ogni bit di un numero intero invece delle operazioni booleane di True e False. Usa & e | invece di ee o.

Vedere il seguente articolo per l’istruzione se.

e (Congiunzione logica)

e la connessione logica di due valori.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

In pratica, viene spesso utilizzato per espressioni condizionali con operatori di confronto (<, >, ecc.) piuttosto che per Vero, Falso. Lo stesso vale per oe non descritto in seguito.

a = 10
print(0 < a)
# True

print(a < 100)
# True

print(0 < a and a < 100)
# True

I confronti multipli possono essere concatenati come segue.

print(0 < a < 100)
# True

o (Disgiunzione logica)

oppure riporta la disgiunzione logica di due valori.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

non (negazione)

non provoca la negazione del valore. Vero e falso sono invertiti.

print(not True)
# False

print(not False)
# True

Precedenza di e, o, non operatori

La precedenza degli operatori booleani non è > e > o (non è la precedenza più alta).

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

Non importa se ci sono parentesi extra (), quindi in casi come questo esempio, le parentesi possono facilitare la comprensione del significato dell’espressione.

print(True or True and False)
# True

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

Se calcolare o prima di e, usa le parentesi () per o.

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

Gli operatori di confronto come <, > hanno una precedenza maggiore rispetto a non, e, o, così le parentesi () non sono richieste per ogni, come nell’esempio precedente.

print(0 < a and a < 100)
# True

Consulta la documentazione ufficiale di seguito per un riepilogo della precedenza degli operatori in Python.

Operazioni booleane per oggetti che non sono di tipo booleano

Gli operatori booleani e, o, non gestiscono non solo il tipo bool (Vero, Falso) ma anche numeri, stringhe, elenchi, ecc.

In Python, i seguenti oggetti sono considerati falsi nelle operazioni booleane.

  • costante costante falso:None and False
  • zero di qualsiasi tipo numerico:0, 0.0, 0j, Decimal(0), Fraction(0, 1)
  • raccolte e sequenze:'', (), [], {}, set(), range(0)

Tutto il resto è considerato vero.

Puoi ottenere il valore booleano di un oggetto con la funzione bool(). Si noti che le stringhe ‘0’ e ‘False’ sono premuroso vere.

print(bool(10))
# True

print(bool(0))
# False

print(bool(''))
# False

print(bool('0'))
# True

print(bool('False'))
# True

print(bool([]))
# False

print(bool([False]))
# True

Usa distutils.util.strtobool() per trattare le stringhe ‘0’ e ‘False’ come false. Vedi il seguente articolo.

e, o NON richiama sempre il tipo bool

e, o, e non per numeri interi:

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Come puoi vedere dall’esempio sopra, in Python, e eo non produce bool (True,False), ma restituisce valori sinistro o destro. non bo resol (Vero, Falso).

Lo stesso vale per altri tipi come stringhe, elenchi, ecc.

Le definizioni dei valori restituiti di eeo sono le seguenti.

L’espressione xey valuta prima x; se x è falso, viene restituito il suo valore; in caso contrario, y viene valutato e viene restituito il valore risultante.

L’espressione xoy valuta prima x; se x è vero, viene restituito il suo valore; in caso contrario, y viene valutato e viene restituito il valore risultante.
6. Espressioni — Documentazione Python 3.9.1

Se i valori a sinistra ea destra sono vero e falso, il valore restituito è facile da capire, ma se entrambi sono veri o entrambi sono falsi, il valore restituito varia a seconda dell’ordine.

Quando lo si utilizza come espressione condizionale in un’istruzione se, il risultato viene testato come booleano, quindi non valore è necessario preoccuparsene, ma prestare attenzione quando si utilizza il valore restituito nelle operazioni successive.

x = 10  # True
y = 100  # True

print(x and y)
# 100

print(y and x)
# 10

print(x or y)
# 10

print(y or x)
# 100
x = 0  # False
y = 0.0  # False

print(x and y)
# 0

print(y and x)
# 0.0

print(x or y)
# 0.0

print(y or x)
# 0

print(bool(x and y))
# False

Se vuoi ricevere il risultato come True o False, usa bool() come nell’ultimo esempio.

I valori di ritorno di eeo sono riepilogati nella seguente tabella.

X y xey xoy
VERO falso y X
falso VERO X y
VERO VERO y X
falso falso X y

Valutazione del cortocircuito

Come puoi vedere dalla tabella sopra, se x è falso in xey o se x è vero in xoy, il valore restituito è sempre x. In questi casi, y non viene valutato.

Si noti che se si chiama una funzione o un metodo sul lato destro di eeo, potrebbero non essere eseguiti a seconda del risultato sul lato sinistro.

def test():
    print('function is called')
    return True

print(True and test())
# function is called
# True

print(False and test())
# False

print(True or test())
# True

print(False or test())
# function is called
# True