python и / или операторы возвращают значение [дубликат]
На этот вопрос уже есть ответ здесь:
Я смотрел видео 2007 года на продвинутом Python или понимании Python, и в 18'27" говорящий утверждает", как некоторые могут знать в Python and
и or
возвращают одно из двух значений, тогда как not
возвращает всегда булево." Когда так ли это было на самом деле?
Насколько я могу судить, and
и or
также возвращают булевы.
4 ответа:
Операторы
and
иor
возвращают один из своих операндов, а не чистое булево значение, какTrue
илиFalse
:>>> 0 or 42 42 >>> 0 and 42 0
Тогда как
not
всегда возвращает чистое булево значение:>>> not 0 True >>> not 42 False
См. эту таблицу из стандартной ссылки на библиотеку в Python docs:
Из Python docs:
Оператор не дает True, если его аргумент ложен, False в противном случае.Выражение x и y сначала вычисляет x; если x равно false, то возвращается его значение; в противном случае вычисляется y и возвращается результирующее значение.
Выражение x или y сначала вычисляет x; если x истинно, то возвращается его значение; в противном случае вычисляется y и возвращается результирующее значение.
Оператор питона
or
возвращает первое значение true-y или последнее значение и останавливается. Это очень полезно для обычных заданий программирования, которым требуются резервные значения.Как этот простой:
print my_list or "no values"
Это напечатает
my_list
, если в нем что-то есть. В противном случае он выведетno values
(Если список пуст, или этоNone
...).Простой пример:
>>> my_list = [] >>> print my_list or 'no values' no values >>> my_list.append(1) >>> print my_list or 'no values' [1]
Комплимент с помощью
and
, который возвращает первое значение False-y или последнее значение и останавливается, используется, когда вы хотите, чтобы охранник, а не запасной вариант.Вот так:
my_list and my_list.pop()
Это полезно, Так как вы не можете использовать
list.pop
наNone
или[]
, которые являются общими предшествующими значениями списков.Простой пример:
>>> my_list = None >>> print my_list and my_list.pop() None >>> my_list = [1] >>> print my_list and my_list.pop() 1
В обоих случаях возвращались не булевы значения, и никаких исключений не возникало.
Нужно добавить несколько пунктов к ответу @Frédéric.
Возвращают ли они один из своих операндов???
Это правда.Но это не та логика, которая стоит за всем этим. В python числа, кроме 0, считаются истинными, а число 0-ложным.
(o и 42 - > False и True)=False.
Вот почему он возвращает 0.
(0 или 42 - > false или True) =42
В этом случае утверждение будет истинным из-за операнда 42. таким образом, python возвращает операнд, который в этом случае делает утверждение истинным.