Подтвердить что ты не робот

False или None vs. None или False

In [20]: print None or False
-------> print(None or False)
False

In [21]: print False or None
-------> print(False or None)
None

Такое поведение смущает меня. Может ли кто-нибудь объяснить мне, почему это происходит так? Я ожидал, что они оба будут вести себя одинаково.

4b9b3361

Ответ 1

Выражение x or y оценивается как x, если x истинно, или y, если x - false.

Обратите внимание, что "true" и "false" в приведенном выше предложении говорят о "правдивости", а не о фиксированных значениях True и False. То, что является "истинным", делает утверждение if успешным; что-то, что "ложное" заставляет его терпеть неудачу. "false" значения включают False, None, 0 и [] (пустой список).

Ответ 2

Оператор "или" возвращает значение своего первого операнда, если это значение истинно в логическом смысле Pythonic (он же "правдоподобие" ), в противном случае он возвращает значение его второго операнда, каким бы он ни был. См. Подраздел Логические операции в разделе "Выражения" в current онлайн-документации.

В обоих примерах первый операнд считается ложным, поэтому значение второго становится результатом оценки выражения.

Ответ 3

Близкая тема: Python or и and short-circuit. В логической операции or, если любой аргумент является истинным, тогда все это будет истинным, и ничто другое не должно быть оценено; Python быстро возвращает это "истинное" значение. Если он заканчивается и ничего не было правдой, он возвращает последний обработанный аргумент, который будет "ложным" значением.

and является противоположным, если он видит какие-либо ложные значения, он быстро выйдет с этим "ложным" значением или, если он пройдет через все это, вернет окончательное "истинное" значение.

>>> 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

Ответ 4

Вы должны понимать, что 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.

Ответ 5

С логической точки зрения оба они ведут себя одинаково, оба возвращают значение, которое оценивается как false.

or просто "повторно использует" значения, которые он задает, возвращая левый, если это было правдой, а другое - в противном случае.

Ответ 6

Condition1 or Condition2

если Condition1 является False, тогда evalute и return Condition2. Ни один не отклоняется от False.