Расширенное назначение на 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
Пожалуйста, смотрите этот пост для более подробного обсуждения побитовых и логических операций в этом контексте.