2013-10-24 3 views
4

Python не поддерживает прирост C-style ++a, но, к моему удивлению, он не жалуется на то, что я временно забеспокоился о том, почему мой цикл не работает.Что такое оператор ++ в Python?

Попытка несколько вещей (будучи первым инициализирован с a=0) Я считаю, что a++ и a-- производить синтаксическую ошибку, но ++a не делает. В то время как --a создает синтаксическую ошибку в Python 3.3, но не в Python 2.7.

Что происходит? Почему не ++a сообщить об ошибке? Почему --a не выдают ошибку в 2.7, но дает ошибку в 3.3?

+2

У меня нет 3.3 под рукой, какая ошибка вы получаете? – georg

+0

По-видимому, я был своего рода маппетом, потому что, когда я пытаюсь снова, он отлично работает. –

ответ

15

Взгляните на эту консольную сессию:

>>> a = 10 
>>> ++a 
10 
>>> +a 
10 
>>> -a 
-10 
>>> --a 
10 

В принципе, ++a == +(+(a)) и --a == -(-(a)). Это один, чтобы попасть в концепции дома (и для удовольствия):

>>> ++++++++++a 
10 

Следующий пример кода не служит никакой цели, кроме как показать вам, сколько удовольствия питон:

>>> +-+-+a 
10 

С чем-то вроде этого, вы можете сделать искусство ASCII, которое работает.

Если вы хотите увеличить, сделайте так: a += 1. И --a работает в Python 2 and 3.

+2

+1 для ASCII art :-) – glglgl

+3

@glglgl hi5 человек. И рубисты говорят, что рубин получает все самое интересное: P –

12

Короткий ответ: он вызывает метод __pos__ дважды. Рассмотрим, например:

>>> class A(object): 
...  def __init__(self, x): 
...   self.x = x 
...  def __pos__(self): 
...   return A(2 * self.x) 
...  def __repr__(self): 
...   return 'A(%s)' % self.x 
... 
>>> a = A(1) 
>>> a 
A(1) 
>>> +a 
A(2) 
>>> ++a 
A(4) 
>>> +++a 
A(8) 

Для целых чисел, так как +x возвращает x, это делает в основном ничего.

0

Нет, в Python (оба 2.x и 3.x), используя ++var, будет возвращено то же значение переменной, что и ранее, при условии, что значение переменной было фактически числом. И использование var++ вызовет исключение.

Кроме того, в Python поведение ++var Операции не так же, как и некоторых других языков, таких как PHP, JS, C++, где ++var на самом деле означает, что вы для увеличения значения переменной на 1. Но в Python, чтобы увеличить , вы должны использовать что-то вроде var = var + 1 или var += 1, иначе это не сработает.

Смежные вопросы