В глубь языка Python

Hyip monitor all paying hyips.

Особенности операторов and и or


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

Пример 2.16. Оператор and

>>> 'a' and 'b'

1

'b' >>> '' and 'b'

2

'' >>> 'a' and 'b' and 'c'

3

'c'

При использовании оператора and, значения вычисляются в булевом контексте слева напрво. Значения 0, '', [], (), {} и None

являются ложью, все остальное является истиной[3]. Если у and оба операнда являются истиной, результатом будет последнее значение. В данном случае вычисляется выражение 'a', которое является истиной, затем 'b', которое также является истиной, и возвращается 'b'.

Если какой-либо из операндов является ложью, результатом будет первое такое значение. В данном случает '' — первое значение, являющееся ложью.
Все значения являются истиной, так что в результате мы получаем последнее — 'c'.

Пример 2.17. Оператор or

>>> 'a' or 'b'

1

'a' >>> '' or 'b'

2

'b' >>> '' or [] or {}

3

{} >>> def sidefx(): ... print "in sidefx()" ... return 1 >>> 'a' or sidefx()

4

'a'

Как и для and опреранды or вычисляются в булевском контексте слева направо. Если операнд является истиной, or

немедленно возвращает результат. В данном случае 'a'

— первое истинное значение.

or вычисляет выражение '', которое является ложью, затем 'b', которое является истиной, и возвращает 'b'.
Если все значения являются ложью, or возвращает последнее. or вычисляет '' (ложь), []

(ложь), затем {} (ложь) и возвращает {}.

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

Если вы используете C, то, наверное, знакомы с выражением bool ? a : b, которое дает a, если bool




Начало  Назад  Вперед