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

Python и оператор

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

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

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

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

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

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

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

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

>>> False and False
False
>>> False and True
False
>>> True and False
False
>>> True and True
True

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

Вы также можете применить и оператор и оператор в целые числа:

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

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

>>> 0 and 0
0
>>> 0 and 1
0
>>> 1 and 0
0
>>> 1 and 1
1

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

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

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

>>> class My_Obj:
	None

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

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

>>> bool(My_Obj())
True

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

False True False
True True True

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

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

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

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

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

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

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

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

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

Python и оператор VS &

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

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

>>> True and True
True
>>> True & True
True

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

>>> 32 and 16
16
>>> 32 & 16
0

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

Второе выражение 32 и 16 работает на битовых представлениях 10000 (десятичных 32) и 01000 (десятичных 16) и выполняет бидж и. Поскольку все I-Th Bit Positions разные, результат 0:

Первый операнд А. 1 0 0 0 0 0
Второй операнду Б. 0 1 0 0 0 0
A & B. 0 0 0 0 0 0

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

>>> 31 & 15
15

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

Первый операнд А. 1 1 1 1 1
Второй операнду Б. 0 1 1 1 1
A & B. 0 1 1 1 1

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

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 будет правильно, тогда как Если A && B будет неверным.

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

# YES!
if 2+2 == 4 and 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 одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

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

Оригинал: “https://blog.finxter.com/python-and-operator/”