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
Такое поведение смущает меня. Может ли кто-нибудь объяснить мне, почему это происходит так? Я ожидал, что они оба будут вести себя одинаково.
Ответы
Ответ 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.