LINUX.ORG.RU

определение работы логических операторов and и or в Python 3


0

1

Всем привет. начинаю изучать python(3ю версию). в качестве учебника взял «Программирование на Python 3», автор Марк Саммерфилд. так вот, на странице 40 есть определение работы логических операторов and и or: «Операторы and и or вычисляются по короткой схеме и возвращают операнд, определяющий результат, - они не возвращают результат типа Boolean». и приводится пример. 1)что такое «короткая схема»? 2)как это «возвращают операнд, определяющий результат»? по какому критерию он возвращает? посмотрев на примеря, я ещё больше запутался помогите, пожалуйста

1)что такое «короткая схема»?

Вот тут есть:

...При этом применяется стандартное соглашение: если значение левого операнда равно , то значение правого операнда не вычисляется (вместо может стоять сложная формула). Такое соглашение ускоряет исполнение программы и служит полезным приемом в некоторых случаях. Компилятор Delphi поддерживает специальную директиву, включающую...

2)как это «возвращают операнд, определяющий результат»? по какому критерию он возвращает? посмотрев на примеря, я ещё больше запутался помогите, пожалуйста

0 or 2 => 2 (а не true)
2 and 0 => 0 (а не false)

Как-то так, скорее всего

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

1) я так понимаю,что в книге просто отсутствует ключевое слово false, так? 2)и всё равно не понятно, по какому критерию... разве что or аналогичен < (0 < 2 => 2(а не true)), а and, наоборот, оператору > (ну это грубая аналогия, но всё же....) я правильно суть понял?

wertklop
() автор топика
Ответ на: комментарий от wertklop

>1) я так понимаю,что в книге просто отсутствует ключевое слово false, так?

В моей цитате 'false' потерялось. Смотри, допустим есть такое выражение a and b.

Сначала будет вычилено a. Далее (сокращенном вычислении and), будет проверено a — истинно или ложно. Если значение а ложно, то b даже не будет вычисляться. Аналогично, для or — если a вычисляется в истину, то b даже не будет вычисляться. Так понятнее?

Истинным значением является не только True: для каждого типа есть свои правила интерпретирования его в логическом контексте (см. тут — http://diveintopython3.org/native-datatypes.html#booleans).

2)и всё равно не понятно, по какому критерию... разве что or аналогичен < (0 < 2 => 2(а не true)), а and, наоборот, оператору > (ну это грубая аналогия, но всё же....) я правильно суть понял?

при чем тут <? тут всего лишь говорят, что a and b, в случае, если значение a — истинно (по правилам логического контекста), то сам оператор and вернет это значение, а не True. Иными словами a and b имеет не тип Boolean, а тип последнего вычесленного значиния (будь то a или b).

Sectoid ★★★★★
()
Ответ на: комментарий от Sectoid

1)ответ я ещё с первого раза понял, просто дискретную матем-ку подзабыл))). а false не ты потерял, а автор книги.

2)не совсем всё-таки понял, но буду дальше изучать, должно же когда то прозрение произойти)))))))))))))))))))))))))))

wertklop
() автор топика
Ответ на: комментарий от wertklop
>>> a = 0 or 'asd'
>>> a
'asd'
>>> a = 'qwert' or 0
>>> a
'qwert'
>>> a = 'qwert' and 0
>>> a
0
>>> a = 'qwert' and 'x'
>>> a
'x'

более близкий к реальности пример:

value = findBySomeKey(key1) or findBySomeKey(key2)

Sectoid ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.