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

Python и/или операторы возвращают значение

Я смотрел видео 2007 года на расширенном Python или понимании Python, а в 18'27 "говорящий говорит:" Как некоторые могут знать в Python and и or возвращает одно из двух значений, тогда как not всегда возвращает логическое значение. "Когда это было так?

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

4b9b3361

Ответ 1

Операторы and и or возвращают один из своих операндов, а не чисто булево значение, например True или False:

>>> 0 or 42
42
>>> 0 and 42
0

В то время как not всегда возвращает чисто логическое значение:

>>> not 0
True
>>> not 42
False

Ответ 2

См. эту таблицу из стандартной ссылки на библиотеку в документах Python:

Boolean Operations

Ответ 3

из Документы Python:

Оператор не дает True, если его аргумент ложный, False в противном случае.

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

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

Оператор Python or возвращает первое значение Truth-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

В обоих случаях возвращались небулевые значения, и исключений не было.

Ответ 4

Нужно добавить несколько моментов в ответ @Frédéric.

вернуть один из их операндов???

Это правда, но это не логика за этим. В python число, кроме 0, считается истинным, а число 0 - ложным.

(0 и 42 → Ложь и Истина) = Ложь.

Вот почему он возвращает 0.

(0 или 42-> false или True) = 42

В этом случае оператор будет True из-за операнда 42. поэтому python возвращает операнд, который заставляет оператор быть истинным, в этом случае.