Si sta confondendo il comportamento dell'operatore or
; restituisce la prima espressione che solo se è un valore vero; né 0
né False
vale quindi il secondo valore è restituito:
>>> 0 or 'bar'
'bar'
>>> False or 'foo'
'foo'
Qualsiasi valore non è numerico 0, un contenitore vuoto, None
o False
è considerato true (classi personalizzate possono alterare che implementando un metodo __bool__
(pitone 3), __nonzero__
(pitone 2) o __len__
(lunghezza 0 è vuoto)
la seconda espressione non è nemmeno valutato se la prima è True
:.
>>> True or 1/0
True
L'espressione 1/0
genererebbe un'eccezione ZeroDivision
, ma non è nemmeno valutata da Python.
Questo è documentato nella boolean operators documentation:
L'espressione x or y
valuta prima x
; se x
è true, viene restituito il suo valore; in caso contrario, viene valutato e viene restituito il valore risultante.
Analogamente, and
restituisce la prima espressione se è False
, altrimenti viene restituita la seconda espressione.
fonte
2013-11-04 22:18:29
Si noti che entrambi questi valori sono "falsy"; cioè, entrambi valutano "False" in un'istruzione if. –