В чем разница между a+=1 и a=+1..?

как понять разницу между a+=1 и a=+1 в Python?

кажется, что они разные. когда я отлаживаю их в Python IDLE, у обоих был разный вывод.

(plus)1 — это просто 1 (положительный 1), поэтому a=+1 — это просто a=1. (plus) должно быть +, но stackoverflow не позволяет мне начать комментарий с +1 :(
Aplet123 24.12.2020 17:50

Один из них — a += 1, расширенное присваивание, эквивалентное a = a + 1, другой — a = +1, присваивание и унарный плюс, эквивалентный a = 1. Если a не было нулем, они будут разными

jonrsharpe 24.12.2020 17:51

Когда вы спрашиваете о каком-то неожиданном поведении, предоставьте необходимый код и входные данные, чтобы воспроизвести точную проблему и то, что вы ожидали вместо этого. a += 1 в одиночку даст NameError.

Pac0 24.12.2020 17:53
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
914
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Конечно, они разные - a+=1 устанавливает значение a в a + 1 и a=+1 устанавливает значение a равным 1:

>>> a = 2
>>> a += 1
>>> a
3
>>> a =+1
>>> a
1

a+=1 — это a += 1, где += — это отдельный оператор, означающий то же, что и a = a + 1.

a=+1 — это a = + 1, который присваивает + 1 переменной без использования исходного значения a

И +1 == 1, если это не очевидно

wjandrea 24.12.2020 17:59
Ответ принят как подходящий

Учти это:

a = 1

a = +1   # Assign Var a to value -> +1
a = +1   # Assign Var a to value -> +1
a = +1   # Assign Var a to value -> +1

a += 1
a += 1
a += 1
print(a)  # -> 4

Как видите a = +1 это присвоение переменной (исправлено @adir abargil), но a += 1 действительно добавляет 1 к var a.

Это то же самое, что и a = a+1, и называется: оператор присваивания


Другие ответы на переполнение стека

Документация

Да, вы правы, он снова определяет переменную, я хотел это объяснить, но в спешке написал, что ничего не делает (для новичка кажется, что ничего не делает, но это неправильно)! Сейчас редактирую :)

Federico Baù 24.12.2020 18:18

Это действительно зависит от типа объекта, на который ссылается a.

Для случая, когда a является другим int:

+= — это единственный оператор, расширенный оператор присваивания, который вызывает a=a.__add__(1) для неизменяемых. Он эквивалентен a=a+1 и возвращает новый объект типа int, привязанный к переменной a.

=+ анализируется как два оператора с использованием обычного порядка операций:

  1. + — это унарный оператор, работающий со своим правым аргументом и вызывающий специальную функцию a.__pos__(), подобно тому, как -a инвертирует a с помощью унарного оператора a.__neg__().
  2. = — обычный оператор присваивания

Для изменяемых объектов += вызывает __iadd__() для добавления на месте, которое должно возвращать измененный исходный объект.

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