+=
является оператором сложения на месте .
Это то же самое, что и 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
Люди обычно рекомендуют не делать этого по соображениям производительности, но для большинства сценариев это действительно не проблема. Цитировать из "Типы последовательности" документов :
- Если 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()
его использования.