Оператор Python ++ не работает

Возможный дубликат:
Python: поведение приращения и операторы декремента

Привет, я пробовала это.

++num

а число вообще не меняется, всегда показывать значение при инициализации

если я изменю ++num на num+=1, тогда он заработает.

Итак, мой вопрос: как работает этот оператор ++?


person user469652    schedule 14.10.2010    source источник
comment
Я не вижу необходимости голосовать против этого вопроса. Это дубликат, и соответствующее действие - закрытие, а не голосование против.   -  person Davy8    schedule 14.10.2010
comment
Не работает? Что заставляет вас вообще думать, что он существует? Какой учебник вы читаете? Где ты это увидел?   -  person S.Lott    schedule 15.10.2010
comment
@ S.Lott: Вы могли бы просто начать атаковать Python и думать, что он существует, потому что есть несколько других языков. Если вы просто напишете какую-то функцию и попытаетесь использовать ++x в качестве приращения, она не выдаст никаких ошибок, просто будет тихо сломана.   -  person Nick T    schedule 15.10.2010
comment
@Nick T: нанести удар по Python и подумать, что это не относится к одному предложению. Это очень, очень плохой вопрос. И это плохо говорит обо всех, кто пытается выучить язык, нанося удар. На самом деле, мне очень грустно думать, что люди действительно делают такие вещи. У чтения есть все преимущества. И это быстрее, чем нанести удар. И меньше возможностей для такого чрезвычайно плохого предположения.   -  person S.Lott    schedule 15.10.2010


Ответы (2)


В Python нет оператора ++. Вы дважды применяете к переменной унарный +.

person Nick T    schedule 14.10.2010

Ответ: в Python нет оператора ++. += 1 - это правильный способ увеличения числа, но учтите, что, поскольку целые числа и числа с плавающей запятой неизменяемы в Python,

>>> a = 2
>>> b = a
>>> a += 2
>>> b
2
>>> a
4

Это поведение отличается от поведения изменяемого объекта, где b также изменится после операции:

>>> a = [1]
>>> b = a
>>> a += [2]
>>> b
[1, 2]
>>> a
[1, 2]
person Seth Johnson    schedule 14.10.2010
comment
Я не понимаю, чем поведение + =, которое вы показали, отличается от поведения любого другого языка с оператором + =, который переводит x += c в x = x + c. Даже если тип был изменяемым, + = всегда создает новый экземпляр вместо изменения. - person Davy8; 14.10.2010
comment
+1 за информативность, чем у парня с более быстрым спусковым крючком - person BlueRaja - Danny Pflughoeft; 14.10.2010
comment
@ Davy8: += не создает новый объект, если он изменяемый - только когда это не так. - person Daenyth; 14.10.2010
comment
Интересно ... значит, в Python x += y не переводится в x = x + y. Мне это кажется нелогичным, но меня это еще не укусило. - person Davy8; 14.10.2010
comment
И вы правы, я только что протестировал. Если я сделаю a += [2], я получу описанный результат, но если я сделаю a = a + [2], тогда b останется [1], а a будет [1, 2]. - person Davy8; 14.10.2010
comment
Я не понимаю, как этот пример демонстрирует целочисленную неизменяемость. Если я сделаю int a, b; a = 2; b = a; a += 2 в C с его предположительно изменяемыми целыми числами, я получу точно такой же результат. - person Nick T; 14.10.2010
comment
Фактически, x += y может преобразоваться в x = x + y, если x является объектом с __add__ перегрузкой, но не __iadd__. - person Mike DeSimone; 14.10.2010
comment
@Nick: в Python фактически каждый объект является ссылкой. Он отличается от C. - person Seth Johnson; 14.10.2010
comment
Если он прозрачно работает так же, чем он отличается? Да, я мог бы использовать указатели с кодом C, но механизм переменных по умолчанию работает аналогично. - person Nick T; 14.10.2010