Расширенное назначение на python для логических операторов

Есть ли в Python операторы расширенного присваивания, соответствующие его логическим операторам?

Например, я могу написать это:

x = x + 1

или это:

x += 1

Есть ли что-то, что я могу написать вместо этого:

x = x and y

Чтобы не писать "х" дважды?

Обратите внимание, что мне известны операторы, использующие &=, но я искал оператор, который работал бы, когда y - любой тип, а не только когда y - логическое значение.

2 ответа

Решение

Нет, для логических операторов нет расширенного оператора присваивания.

Расширенное назначение существует, чтобы дать изменяемым левым операндам возможность изменить объект на месте, а не создать новый объект. С другой стороны, логические операторы не могут быть преобразованы в операцию на месте; за x = x and y либо перепривязать x в xили перепривязать y, но x само по себе не изменится.

В качестве таких, x and= y на самом деле было бы довольно запутанным; или x будет неизменным или заменен y,

Если у вас нет настоящих логических объектов, не используйте &= а также |= расширенные назначения для побитовых операторов. Только для логических объектов (так True а также False) перегружены ли эти операторы для получения того же вывода, что и and а также or операторы. Для других типов они либо приведут к TypeErrorили применяется совершенно другая операция. Для целых чисел, это побитовая операция, устанавливает перегрузку для выполнения пересечений.

Эквивалентное выражение &= за and а также |= за or,

>>> b = True
>>> b &= False
>>> b
False

Заметка bitwise AND а также bitwise OR и будет работать только (как вы ожидаете) для bool типы. bitwise AND отличается от logical AND для других типов, таких как числовые

>>> bool(12) and bool(5)   # logical AND
True

>>> 12 & 5    # bitwise AND
4

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

Другие вопросы по тегам