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.