Приоритет оператора и правила вычисления логических выражений работают немного по-другому в Python.Это не делает то, что вы себе представляете:
(a or b) is None
Вышеприведенное условие спрашивает, равен ли результат оценки (a or b)
None
, и никогда не будет None
с текущими значениями a
и b
;a or b
вернет 'Test'
(значение b
), потому что a
равно None
.Если вы хотите проверить, является ли одно из двух значений None
, допустим только первый синтаксис:
a is None or b is None
Просто, чтобы быть понятным, в Python x or y
вернет значение первого неложное выражение, а None
, []
, {}
, ''
, 0
и False
считаются ложными.Если вы хотите немного сократить выражение, это эквивалентно первой версии вашего кода:
if not a or not b: