Python: почему False или «имя» возвращает «имя», а не False?

НАСКОЛЬКО МНЕ ИЗВЕСТНО :

and, or являются логическими операторами, и любое логическое выражение должно возвращать логическое значение.

Итак, почему это происходит:

  • False or 'name' возвращает 'name', а не True
  • True and '' возвращает '', а не False

Пожалуйста, объясните, как python обрабатывает логические выражения?


person Yugal Jindle    schedule 30.10.2012    source источник
comment
Downvoter, пожалуйста, хотя бы поделитесь, что можно было бы улучшить?   -  person Yugal Jindle    schedule 31.10.2012


Ответы (1)


Нет, в python операции or и and замыкаются накоротко и возвращают последний оцененный элемент.

См. логические операции:

Выражение x and y сначала оценивает x; если x ложно, возвращается его значение; в противном случае оценивается y и возвращается результирующее значение.

Выражение x or y сначала оценивает x; если x истинно, возвращается его значение; в противном случае оценивается y и возвращается результирующее значение.

Если вы должны иметь логическое значение, используйте bool():

>>> bool(False or 'name')
True
person Martijn Pieters    schedule 30.10.2012
comment
Но когда я попробовал это в javascript и ruby, он работал так же, как и в python. Но когда я попробовал такое же короткое замыкание в C, он вернул 1 и 0, то есть логические результаты. Поскольку мы используем cpython, он должен вести себя так же, как C, но это не так. Почему? - person Paritosh Singh; 31.10.2012
comment
Это python, а не C. То же самое в Jython, PyPy и IronPython. Язык указывает, как это работает, и «побочный эффект» используется во многих местах; например somevariable = someothervariable or fallback. - person Martijn Pieters; 31.10.2012
comment
Я не имел в виду, что это борьба между языками, я имел в виду, что «и» и «или» являются логическими операторами, поэтому по умолчанию они должны возвращать логический результат. - person Paritosh Singh; 31.10.2012
comment
@ParitoshSingh: Но почему «должны»? Обратите внимание, что до Python 2.2 в Python не было логических значений, только логические интерпретации стандартных типов (0, 0.0, '', [], (), {} все считаются False, большинство других вещей - True). Короткая природа этих операторов — невероятно полезная функция, и я категорически не согласен с тем, что они должны возвращать логическое значение только потому, что они работают на логических принципах. - person Martijn Pieters; 31.10.2012
comment
@Martijin, хорошо, я тебя понял, то, что ты написал ранее, было правильно :). - person Paritosh Singh; 01.11.2012