Nulla viene convertito; gli operatori logici booleani di Python invece cortocircuito.
Vedere il boolean operators documentation:
L'espressione x and y
valuta prima x
; se x
è falso, viene restituito il suo valore; in caso contrario, viene valutato e viene restituito il valore risultante.
L'espressione x or y
prima valuta x
; se x
è true, viene restituito il suo valore; in caso contrario, viene valutato e viene restituito il valore risultante.
Inoltre, i numeri uguali a 0
sono considerati falsi, come lo sono stringhe e contenitori vuoti. Citando dal medesimo documento:
Nel contesto delle operazioni booleane, ed anche quando le espressioni vengono utilizzati da rendiconto controllo, i seguenti valori vengono interpretati come falso: False
, None
, numerico pari a zero di tutti i tipi, e vuota stringhe e contenitori (comprese stringhe, tuple, liste, dizionari, set e frozenset).
Combinando questi due comportamenti significa che per 0 and False
, il 0
è considerato falso e restituiti prima di valutare l'espressione False
. Per l'espressione True and 0
, True
viene valutato e trovato un valore vero, quindi viene restituito 0
. Per quanto riguarda if
e while
e gli altri operatori booleani interessati, il risultato, 0
è considerato falso.
È possibile utilizzare questo per fornire un valore predefinito, ad esempio:
foo = bar or 'default'
Per convertire in realtà un valore non booleano in un valore booleano, utilizzare il bool()
type; utilizza le stesse regole di espressioni booleane per determinare il valore booleano dell'ingresso:
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool([])
False
>>> bool(True and 0)
False
>>> bool(1)
True
Per completare il quadro, i valori che non sono considerati falso in un contesto booleano vengono invece considerate vere, comprese le classi personalizzate. Puoi cambiarlo implementando uno .__nonzero__()
special method sulla tua classe. Se non viene definito alcun metodo, viene anche consultato il numero .__len__()
. Con uno di questi metodi è possibile segnalare che il proprio tipo è numerico e deve essere considerato True
se diverso da zero, oppure è un contenitore e deve essere considerato True
se non vuoto (ha una lunghezza superiore a 0).
'>>> bool ('x')' è 'True' –