Operatori logici di Python e, o, e non (congiunzione logica, disgiunzione, negazione)

Attività commerciale

Python fornisce operatori logici per eseguire operazioni logiche (booleane).(and,or,not)
Si usa per descrivere la relazione tra più condizioni in una dichiarazione if.

Questa sezione descrive quanto segue.

  • intersezione: and
  • aggiunta logica: or
  • negazione: not
  • and,or,notPrecedenza dell'operatore

Inoltre, i seguenti punti sono spiegati come precauzioni.

  • Operatori logici per oggetti di tipo diverso da bool
  • and,orQuesti valori di ritorno non sono necessariamente di tipo bool.
  • Corto circuito (valutazione del corto circuito)

intersezione: and

e restituisce il prodotto logico di due valori.

print(True and True)
# True

print(True and False)
# False

print(False and True)
# False

print(False and False)
# False

Infatti, viene spesso usato non per vero o falso, ma per espressioni condizionali che usano operatori di confronto. Per vostra informazione, gli operatori di confronto sono i seguenti.

  • <
  • >
a = 10
print(0 < a)
# True

print(a < 100)
# True

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

e possono essere concatenati come segue.

print(0 < a < 100)
# True

aggiunta logica: or

o restituisce l'OR logico dei due valori.

print(True or True)
# True

print(True or False)
# True

print(False or True)
# True

print(False or False)
# False

negazione: not

not” restituisce la negazione del valore; vero e falso sono invertiti.

print(not True)
# False

print(not False)
# True

and,or,notPrecedenza dell'operatore

L'ordine di precedenza di questi operatori logici è il seguente: not è il più alto.

  1. not
  2. and
  3. or

Nel seguente codice di esempio, l'espressione precedente viene interpretata come se fosse quella sottostante. Dato che non ci sono problemi con le parentesi extra, può essere più facile descriverle chiaramente in casi come questo esempio.

print(True or True and False)
# True

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

Se volete operare o prima di e, usate le parentesi().

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

<,>Questi operatori di confronto hanno una precedenza ancora più alta che non. Pertanto, le parentesi non sono necessarie per ogni operazione di confronto, come nell'esempio precedente.

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

Vedere la documentazione ufficiale qui sotto per un riassunto della precedenza degli operatori in Python.

Operatori logici per oggetti di tipo diverso da bool

Con questi operatori logici, non solo i tipi bool (vero, falso), ma anche i numeri, le stringhe, le liste, ecc. sono trattati come valori booleani.

I seguenti oggetti sono considerati falsi nelle operazioni logiche di Python.

  • Costanti definite come false: None,false
  • Zero nei tipi numerici: 0,0,0j,Decimal(0),Fraction(0, 1)
  • Sequenza o collezione vuota: '',(),[],{},set(),range(0)

Tutti gli altri valori sono considerati veri.

La funzione bool() può essere usata per ottenere il valore booleano di un oggetto. Notate che la stringa '0' o 'False' è considerata vera.

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

Per gestire '0' o 'false' in una stringa come false, usate distutils.util.strtobool().

and,orQuesti valori di ritorno non sono necessariamente di tipo bool.

Ecco un esempio di un oggetto diverso da un tipo bool, che mostra il risultato di ogni operatore su un valore numerico.

x = 10  # True
y = 0  # False

print(x and y)
# 0

print(x or y)
# 10

print(not x)
# False

Come potete vedere dall'esempio sopra, e e o in Python non restituiscono vero o falso di tipo bool, ma restituiscono il valore a sinistra o a destra a seconda che sia vero o falso. L'esempio è numerico, ma lo stesso vale per altri tipi come stringhe e liste. Per inciso, not restituisce vero o falso di tipo bool.

Le definizioni dei valori di ritorno di e e or sono le seguenti.

The expression x and y first evaluates x; if x is false, its value is returned; otherwise, y is evaluated and the resulting value is returned.

The expression x or y first evaluates x; if x is true, its value is returned; otherwise, y is evaluated and the resulting value is returned.

6.11. Boolean operations — Expressions — Python 3.10.1 Documentation

Quando i valori delle espressioni sinistra e destra sono veri e falsi separatamente, i valori di ritorno sono facili da capire. D'altra parte, se entrambi sono veri o entrambi sono falsi, il valore di ritorno sarà diverso a seconda dell'ordine.

Se lo usate come espressione condizionale in un'istruzione if, ecc., il risultato viene giudicato come un valore booleano ed elaborato, quindi non dovete preoccuparvene, ma se usate il valore di ritorno per ulteriori elaborazioni, dovete stare attenti.

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 volete trattarlo come vero o falso, potete fare come nell'ultimo esempio.
bool(x and y)

I valori di ritorno di e e o sono riassunti nella tabella seguente.

xyx and yx or y
truefalseyx
falsetruexy
truetrueyx
falsefalsexy

Corto circuito (valutazione del corto circuito)

Come potete vedere dalla tabella sopra, se x è falso in x e y, o se x è vero in x o y, il valore di ritorno sarà x indipendentemente dal valore di y.

In questo caso, y non viene valutato.

and,orNotate che se chiamate una funzione o un metodo sul lato destro di questi processi per fare qualche elaborazione, il processo potrebbe non essere eseguito 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