Что означает + = в Python?

Я вижу код, подобный этому, например, в Python:

    if cnt > 0 and len(aStr) > 1:
        while cnt > 0:                  
            aStr = aStr[1:]+aStr[0]
            cnt += 1

Что означает +=?

Ответ 1

a += b по существу совпадает с a = a + b, за исключением того, что:

  • + всегда возвращает вновь выделенный объект, но += должен (но не обязательно) изменять объект на месте, если он изменен (например, list или dict, но int и str являются неизменяемыми).
  • В a = a + b, a оценивается дважды.

http://docs.python.org/reference/simple_stmts.html#augmented-assignment-statements


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

# two variables referring to the same list
>>> list1 = []
>>> list2 = list1

# += modifies the object pointed to by list1 and list2
>>> list1 += [0]
>>> list1, list2
([0], [0])

# + creates a new, independent object
>>> list1 = []
>>> list2 = list1
>>> list1 = list1 + [0]
>>> list1, list2
([0], [])

Ответ 2

a += b

в этом случае совпадает с

a = a + b

В этом случае cnt + = 1 означает, что cnt увеличивается на единицу.

Обратите внимание, что введенный вами код будет зависеть бесконечно, если cnt > 0 и len (aStr) > 1.

Изменить: quote Карл Майер:` `[..] ответ ошибочно в основном правилен. Существует тонкая, но очень значительная разница между + и + =, см. ответ Bastien. ''.

Ответ 3

Google 'python + = operator' ведет вас к http://docs.python.org/library/operator.html

Искать + = после загрузки страницы для более подробного ответа.

Ответ 4

FYI: похоже, у вас может быть бесконечный цикл в вашем примере...

if cnt > 0 and len(aStr) > 1:
    while cnt > 0:                  
        aStr = aStr[1:]+aStr[0]
        cnt += 1
  • условие входа в цикл состоит в том, что cnt больше 0
  • цикл продолжает работать до тех пор, пока cnt больше 0
  • каждая итерация цикла увеличивает cnt на 1

Конечным результатом является то, что cnt всегда будет больше 0, и цикл никогда не выйдет.

Ответ 5

+= является оператор добавления на месте.

Это то же самое, что и при выполнении cnt = cnt + 1. Например:

>>> cnt = 0
>>> cnt += 2
>>> print cnt
2
>>> cnt += 42
>>> print cnt
44

Оператор часто используется аналогично оператору ++ в языках C-ish, чтобы прирастить переменную по одному в цикле (i += 1)

Есть аналогичный оператор для вычитания/умножения/деления/мощности и других:

i -= 1 # same as i = i - 1
i *= 2 # i = i * 2
i /= 3 # i = i / 3
i **= 4 # i = i ** 4

Оператор += также работает с строками, например:

>>> s = "Hi"
>>> s += " there"
>>> print s
Hi there

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

  1. Если s и t - обе строки, некоторые реализации Python, такие как CPython, обычно могут выполнять оптимизацию на месте для присвоений формы s = s + t или s + = t. Когда это применимо, эта оптимизация делает квадратичное время выполнения гораздо менее вероятным. Эта оптимизация зависит как от версии, так и от реализации. Для чувствительного к производительности кода предпочтительнее использовать метод str.join(), который обеспечивает согласованную производительность линейной конкатенации по версиям и реализациям.

Метод str.join() ссылается на следующее:

mysentence = []
for x in range(100):
    mysentence.append("test")
" ".join(mysentence)

.. вместо более очевидного:

mysentence = ""
for x in range(100):
    mysentence += " test"

Проблема с более поздней версией (помимо ведущего пространства), в зависимости от реализации Python, интерпретатору Python придется создавать новую копию строки в памяти каждый раз, когда вы добавляете (поскольку строки неизменяемы) который будет постепенно замедляться, чем дольше будет добавлена ​​строка. Если добавление к списку, тогда объединение его в строку является последовательной скоростью (независимо от реализации).

Если вы делаете основные манипуляции с строкой, не беспокойтесь об этом. Если вы видите цикл, который в основном просто добавляет к строке, подумайте о построении массива, затем "".join() 'ing.

Ответ 6

это означает "добавить "THIS" к текущему значению"

Пример:

a = "привет"; a + = "мир";

Теперь будет выведена печать a: "hello world"