140 votes

Que fait exactement += en python ?

J'ai besoin de savoir ce que += fait en Python. C'est aussi simple que cela. J'apprécierais également des liens vers des définitions d'autres outils de sténographie en Python.

7 votes

2 votes

C'est un opérateur de base pour python (et beaucoup d'autres langages aussi), vous devriez commencer avec google, si vous n'avez jamais lu de références sur python.

3 votes

@AndiDog Bien qu'il soit vrai que les deux questions portent sur l'opérateur (+=), celle que vous avez liée concerne un usage sophistiqué et un problème subtil, et le PO ici n'est probablement pas en mesure de suivre le raisonnement (encore).

165voto

Bryan Points 126

En Python, += est l'enrobage de sucre pour la fonction __iadd__ méthode spéciale, ou __add__ o __radd__ si __iadd__ n'est pas présent. Le site __iadd__ d'une classe peut faire tout ce qu'elle veut. L'objet liste l'implémente et l'utilise pour itérer sur un objet itérable en ajoutant chaque élément à lui-même de la même manière que la méthode extend de la liste.

Voici une classe personnalisée simple qui implémente la fonction __iadd__ méthode spéciale. Vous initialisez l'objet avec un int, puis vous pouvez utiliser l'opérateur += pour ajouter un nombre. J'ai ajouté une instruction print dans __iadd__ pour montrer qu'il est appelé. Aussi, __iadd__ est censé retourner un objet, donc j'ai retourné l'addition de lui-même plus l'autre nombre, ce qui est logique dans ce cas.

>>> class Adder(object):
        def __init__(self, num=0):
            self.num = num

        def __iadd__(self, other):
            print 'in __iadd__', other
            self.num = self.num + other
            return self.num

>>> a = Adder(2)
>>> a += 3
in __iadd__ 3
>>> a
5

J'espère que cela vous aidera.

145voto

Imran Points 20117

+= ajoute une autre valeur à celle de la variable et attribue la nouvelle valeur à la variable.

>>> x = 3
>>> x += 2
>>> print x
5

-= , *= , /= fait de même pour la soustraction, la multiplication et la division.

51voto

Roshan Mehta Points 867

x += 5 n'est pas exactement la même chose que de dire x = x + 5 en Python.

Notez ici :

In [1]: x = [2, 3, 4]    

In [2]: y = x    

In [3]: x += 7, 8, 9    

In [4]: x
Out[4]: [2, 3, 4, 7, 8, 9]    

In [5]: y
Out[5]: [2, 3, 4, 7, 8, 9]    

In [6]: x += [44, 55]    

In [7]: x
Out[7]: [2, 3, 4, 7, 8, 9, 44, 55]    

In [8]: y
Out[8]: [2, 3, 4, 7, 8, 9, 44, 55]    

In [9]: x = x + [33, 22]    

In [10]: x
Out[10]: [2, 3, 4, 7, 8, 9, 44, 55, 33, 22]    

In [11]: y
Out[11]: [2, 3, 4, 7, 8, 9, 44, 55]

Voir pour référence : Pourquoi += se comporte-t-il de manière inattendue sur les listes ?

0 votes

C'est la même chose, cependant, sauf pour le cas bizarre x += 7,8,9

0 votes

En outre, l'un des fils de discussion liés fournit une bonne discussion sur les différences exactes. stackoverflow.com/questions/6951792/

33voto

Ryan Bigg Points 64561

+= ajoute un nombre à une variable, modifiant la variable elle-même dans le processus (alors que + ne le ferait pas). Dans le même ordre d'idées, il existe les éléments suivants qui modifient également la variable :

  • -= soustrait une valeur d'une variable, en donnant à la variable la valeur du résultat.
  • *= multiplie la variable et une valeur, faisant du résultat la variable.
  • /= divise la variable par la valeur, ce qui fait du résultat la variable.
  • %= effectue un modulus sur la variable, la variable étant ensuite définie comme le résultat de ce modulus.

Il y en a peut-être d'autres. Je ne suis pas un programmeur Python.

24voto

C S Points 231

Il ne s'agit pas d'un simple sucre syntaxique. Essayez ceci :

x = []                 # empty list
x += "something"       # iterates over the string and appends to list
print(x)               # ['s', 'o', 'm', 'e', 't', 'h', 'i', 'n', 'g']

contre

x = []                 # empty list
x = x + "something"    # TypeError: can only concatenate list (not "str") to list

El += invoque l'opérateur __iadd__() tandis que la méthode de liste + on invoque le __add__() un. Ils font des choses différentes avec les listes.

0 votes

J'étais si confus à ce sujet ! Merci pour votre code et vos explications. Il semble que += ne fonctionne sans danger que pour les nombres. Ai-je raison ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X