Я вижу код, подобный этому, например, в Python:
if cnt > 0 and len(aStr) > 1:
while cnt > 0:
aStr = aStr[1:]+aStr[0]
cnt += 1
Что означает +=
?
Я вижу код, подобный этому, например, в Python:
if cnt > 0 and len(aStr) > 1:
while cnt > 0:
aStr = aStr[1:]+aStr[0]
cnt += 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], [])
a += b
в этом случае совпадает с
a = a + b
В этом случае cnt + = 1 означает, что cnt увеличивается на единицу.
Обратите внимание, что введенный вами код будет зависеть бесконечно, если cnt > 0 и len (aStr) > 1.
Изменить: quote Карл Майер:` `[..] ответ ошибочно в основном правилен. Существует тонкая, но очень значительная разница между + и + =, см. ответ Bastien. ''.
Google 'python + = operator' ведет вас к http://docs.python.org/library/operator.html
Искать + = после загрузки страницы для более подробного ответа.
FYI: похоже, у вас может быть бесконечный цикл в вашем примере...
if cnt > 0 and len(aStr) > 1:
while cnt > 0:
aStr = aStr[1:]+aStr[0]
cnt += 1
cnt
больше 0cnt
больше 0cnt
на 1Конечным результатом является то, что cnt
всегда будет больше 0, и цикл никогда не выйдет.
+=
является оператор добавления на месте.
Это то же самое, что и при выполнении 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()
'ing.
это означает "добавить "THIS" к текущему значению"
Пример:
a = "привет"; a + = "мир";
Теперь будет выведена печать a: "hello world"