Рубрики
Без рубрики

Python или оператор

Python или оператор выполняет логическую или операцию, которая возвращает true, если хотя бы один из операндов оценивает true. Оператор выполняет оптимизацию, называемую короткими замыканиями, поэтому, если первый операнд оценивает true, он возвращает первое прямо сразу, без дальнейшего оценки второго, а если первый операнд оценивает ложь, … Python или Reporate Подробнее »

Автор оригинала: Chris.

Python’s или Оператор выполняет логическую или операцию, которая возвращает Правда Если хотя бы один из операндов оценивает Правда Отказ Оператор выполняет оптимизацию под названием короткое замыкание Итак, если первый операнд оценивает Правда , он возвращает первый прямо сейчас, без дальнейшего оценки второго, а если первый операнд оценивает Ложь , он возвращает второй операнд.

Когда вы прочитали статью, вы также можете посмотреть мое видео для поддержки объяснений:

Python или оператор – на логиках

Вот результат или Оператор при применении к логическим операндам:

False False False
True False True
True True False
True True True

Вы можете увидеть эти примеры в следующем скрипте:

>>> False or False
False
>>> False or True
True
>>> True or False
True
>>> True or True
False

Python или оператор – на целых числах

Вы также можете применить или Оператор для целых чисел:

0 0 0
1 0 1
1 1 0
1 1 1

То же самое можно увидеть в следующем сценарии Python:

>>> 0 or 0
0
>>> 0 or 1
0
>>> 1 or 0
0
>>> 1 or 1
1

Python или оператор – на объектах

Интересно, что вы также можете применить логический или оператор на произвольных объектах Python. Базовая идея – «правдоподобность» объектов Python, то есть каждый объект Python имеет соответствующее логическое значение, как определено __bool __ () магический метод.

В следующем коде вы создаете пользовательский класс под названием My_obj и использовать оператор « или » на экземпляры этого класса.

>>> class My_Obj:
	None

	
>>> My_Obj() or My_Obj()
<__main__.My_Obj object at 0x0000025108D897F0>
>>> 0 or My_Obj()
<__main__.My_Obj object at 0x0000025108D897F0>
>>> 1 or My_Obj()
1

Вы можете удивиться, почему некоторые выходы так же странно выглядят, как они. Причина проста: каждый пользовательский объект имеет связанное неявное логическое значение:

>>> bool(My_Obj())
True

Если первый операнд или Операция оценивает Ложь Python выполняет короткое замыкание Оптимизация, то есть, это немедленно возвращает второй операнд. Это имеет смысл, потому что второй операнд логически определяет общий результат (см. Таблицы ниже, где первый операнд IS False ).

False False False
True False True

Таким образом, не нужно даже оценить второй операнд – и Python просто возвращает его без модификации. Вот почему результат или Операция может быть пользовательским объектом вместо логического значения.

Python или оператор – в списках

Вы можете применить или Оператор на произвольных объектах, в том числе Списки Отказ Каждый объект списка имеет связанное логическое значение, как определено Bool (список) Метод-все списки оценивают в Правда Кроме пустого списка. Если вы применяете или Оператор по двум спискам Python возвращает первый список, если это не пустые (Из-за Короткие замыкания ), а второй список иначе.

>>> [1, 2, 3] or [4, 5, 6]
[1, 2, 3]
>>> [] or [4, 5, 6]
[4, 5, 6]
>>> [1, 2, 3] or []
[1, 2, 3]
>>> [] or []
[]

Итак, вы бы использовали Python или Оператор в списках, например, если бы вы имели ряд списков резервных копий (второй, третий, четвертый, …), который следует использовать вместо более высоких приоритетных, если они пусты.

Python или оператор короткое замыкание

Короткое замыкание – это общая оптимизация в языках программирования, которые используют следующее наблюдение: если первый оператор оценивает Правда весь или выражение должно оценить на Правда тоже. Таким образом, не нужно оценивать последующие операнды, чтобы узнать результат общего логического выражения. Только если первый операнд Ложь , он движется дальше ко второму операнду – и, потенциально, третий и так далее. Это может сэкономить значительное время при оценке сложных логических выражений.

Минимальный пример короткого замыкания на или Оператор отображается здесь:

>>> True or print('Am I evaluated?')
True 
>>> False or print('Am I evaluated?')
Am I evaluated?

Мы используем простой трюк, чтобы проверить, оценивается ли второй операнд или не из-за оптимизации короткого замыкания – второй операнд является Печать () Заявление, которое всегда возвращает Нет Но генерирует видимые побочные эффекты при выполнении. Вы можете увидеть, что в первом примере его не оценивается, потому что первый операнд уже определяет результат всего выражения. Но во втором примере он оценивается, потому что первый операнд не предоставляет окончательного ответа на результат общего выражения.

Python или оператор VS |

Оператор « или » Python выполняет логическую или операцию, которая возвращает Правда Если один или несколько операндов являются Правда Отказ Символ Python’s « | » – это побитовый оператор, который работает на битах представления операндов и немного работает по битной работе. Итак, « или » тестирует, будет ли хотя бы один операнд логически Правда Принимая во внимание, что « | » выполняет побитовые или операцию на операндах.

При рассмотрении только один бит, семантически, например, при сравнении логических, операторы одинаковы:

>>> True or False
True
>>> True | False
True

Однако разница становится очевидной, если вы используете целочисленные операнды:

>>> 32 or 16
32
>>> 32 | 16
48

Первое выражение 32 или 16 Определяет, что целочисленное значение 32 связано с логией Правда Таким образом, он возвращает первый операнд 32, поскольку он выполняет оптимизацию короткого замыкания.

Второе выражение 32 |. 16 Работает на битовых представлениях 10000 (десятичных 32) и 01000 (десятичное число 16) и выполняет биджи или. Результатом является битовое представление 11000, которое представляет десятичное 48:

Первый операнд А. 1 0 0 0 0 0
Второй операнду Б. 0 1 0 0 0 0
A |. Преступник 1 1 0 0 0 0

Точно так же давайте посмотрим на другой пример, чтобы продемонстрировать побитовый или оператор:

>>> 31 | 15
31

Вы можете увидеть это в следующей визуализации:

Первый операнд А. 1 1 1 1 1
Второй операнду Б. 0 1 1 1 1
A |. Преступник 1 1 1 1 1

Десятичное представление битовой последовательности 11111 составляет 31.

Python или Оценка оператора Оценка

Python оценивает левый перед правым операндом. Он использует короткое замыкание при оценке выражений с участием логического и или или Операторы, поэтому он не оценивает второй операнд, если не нужно определять результат. логично и имеет приоритет до логического или Отказ

В следующем примере вы видите, что оператор «И» оценивается в первую очередь, потому что он имеет приоритет над оператором «или».

>>> False and False or True
True
>>> (False and False) or True
True
>>> False and (False or True)
False

Тот же приоритет можно увидеть здесь:

>>> True or False and False
True
>>> (True or False) and False
False
>>> True or (False and False)
True

Это также исключает то, что многие люди ошибочно предполагают – то, что есть первоприходительный операторский приоритет. В этом примере оператор «или» оценивается последним, даже если он на первом месте.

Python или оператор в случае условия

Если вы хотите использовать логический или оператор в состоянии, если используйте ключевое слово или вместо двойного Символ вы можете знать как логические или от Java или C ++. Например, Если A или B будет правильно, тогда как Если

Вот правильное использование логического и в состоянии, если состояние:

# YES!
if 2+2 == 4 or 2-2 == 0:
    print('YES!')

Результатом этого кода фрагмент является 'ДА!' Отказ

Вот неправильный способ сделать это как кодер C ++ или Java, идущий Python:

# NO!
if 2+2 == 4 || 2-2 == 0:
    print('NO!')

Результатом этого кода фрагмент является SyntaxError :

Чтобы разрешить это, просто замените неисправный двойной символ С правильным ключевым словом или

Логические операторы

Логические операторы – это ярлыки для выполнения логических сравнений, но также могут использоваться на целых числах и других объектах.

(Правда и правда) а также Возвращает true, если обе операнды верны, и ложь иначе.
(Ложь или правда) или же Возвращает true, если хотя бы один из двух операндов верно, и ложь иначе.
(не правда) нет Возвращает true, если один операнд ложный, и False в противном случае.

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.