Python: False или None против None или False
In [20]: print None or False
-------> print(None or False)
False
In [21]: print False or None
-------> print(False or None)
None
это поведение смущает меня. Может кто-нибудь объяснить мне, почему это происходит? Я ожидал, что они будут вести себя одинаково.
6 ответов
выражение x or y
оценивает в x
если x
- Это правда, или y
Если x
является false.
обратите внимание, что" true "и" false "в приведенном выше предложении говорят о" правдивости", а не о фиксированных значениях True
и False
. Что-то, что "истинно", делает if
утверждение успешно; что-то" ложное " делает его неудачным. "ложные" значения:False
, None
, 0
и []
(пустой список).
оператор "или" возвращает стоимостью его первого операнда, если это значение истинно в Пифоническом булевом смысле (он же его "истинность"), в противном случае он возвращает стоимостью его второго операнда, что-либо. См. подраздел под названием логические операции в разделе выражения на текущей документации.
в обоих ваших примерах первый операнд считается ложным, поэтому значение второго становится результатом вычисления выражения.
тесно связанные темы: в Python or
и and
короткое замыкание. В логическом or
операция, если какой-либо аргумент истинен, то все это будет истинно, и больше ничего не нужно оценивать; Python быстро возвращает это значение "true". Если он заканчивается, и ничего не было true, он возвращает последний аргумент, который он обработал, который будет "false" значение.
and
наоборот, если он видит какие-либо ложные значения, он быстро выйдет с этим " false" value, или если он проходит через все это, возвращает окончательное значение "true".
>>> 1 or 2 # first value TRUE, second value doesn't matter
1
>>> 1 and 2 # first value TRUE, second value might matter
2
>>> 0 or 0.0 # first value FALSE, second value might matter
0.0
>>> 0 and 0.0 # first value FALSE, second value doesn't matter
0
вы должны понять, что None
, False
и True
- все синглтоны.
например, if foo is not None
означает, что foo
имеет некоторое значение, отличное от None
. Это работает так же, как просто if foo
что в принципе if foo == True
.
и not None
и True
работа таким же образом. Кроме того,None
и False
работают одинаково.
>>> foo = not None
>>> bool(foo)
True
>>> foo = 5 # Giving an arbitrary value here
>>> bool(foo)
True
>>> foo = None
>>> bool(foo)
False
>>> foo = 5 # Giving an arbitrary value here
>>> bool(foo)
True
важно понимать и осознавать, Когда кодирование заключается в том, что при сравнении двух вещей, None
должен is
, а True
и False
нужно ==
. Избегайте if foo == None
и не только if foo is None
и не if foo != None
и не только if foo is not None
. В случае if foo is not None
, просто if foo
. В случае if foo is None
, просто if not foo
.
Примечание: True
в основном 1
и False
в основном 0
. В старые времена Python у нас было только 1
для значения true и у нас было 0
для значения false. Это более понятно и по-человечески сказать True
вместо 1
и более понятным и дружественным к человеку сказать False
вместо 0
.
с логической точки зрения они оба ведут себя одинаково, оба возвращают значение, которое оценивается как false.
or
просто "повторно использует" значения, которые ему заданы, возвращая левый, если это было верно, и правый в противном случае.
Condition1 or Condition2
если Condition1 равно False, то evalute и возвращает Condition2. Никто evalutes значение false.