x or y [or z or z1 or z2 or ...]
возвращает первый элемент Truthy в последовательности или последний элемент Falsey, если все являются Falsey.
x and y [and z and z1 and z2 and ...]
возвращает первый элемент Falsey в последовательности или последний элемент Truthy, если все Truthy.
У Python есть понятие Truthiness and Falsiness, которое отделено от True
и False
. Пустым списком не является False
, но это Falsey . bool(something_truthy) == True
и bool(something_falsey) == False
.
Большинство вещей - это Truthy, поэтому легче перечислять вещи Falsey:
0
(обратите внимание, что -1
является Truthy ) None
[]
, {}
, set()
, ""
и т. д. Обратите внимание, что непустые коллекции, содержащие полностью элементы Falsey все еще правдой, например [None, None, None, None]
) False
Все остальное - Truthy.
В вашем примере: [1, 2] or ["hello"] == [1, 2]
, потому что первым элементом [1, 2
является Truthy (тот факт, что ["hello"]
также является Truthy, в данном случае не имеет значения). Обратите внимание, что [1, 2] and ["hello"] == ["hello"]
.