web-dev-qa-db-fra.com

Qu'est-ce que + = fait exactement en python?

J'ai besoin de savoir ce que + = fait en python. C'est si simple. J'apprécierais également les liens vers les définitions d'autres outils à main courte en python.

78
Salvatore Mucciolo

En Python, + = est une couche de sucre pour la méthode spéciale __iadd__, ou __add__ ou __radd__ si __iadd__ n'est pas présent. La méthode __iadd__ d'une classe peut faire tout ce qu'elle veut. L'objet liste l'implémente et l'utilise pour parcourir un objet itératif 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 méthode spéciale __iadd__. Vous initialisez l'objet avec un int, puis pouvez utiliser l'opérateur + = pour ajouter un nombre. J'ai ajouté une instruction print dans __iadd__ pour montrer qu'elle est appelée. De plus, __iadd__ devrait renvoyer un objet. J'ai donc renvoyé l'addition de lui-même et 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 t'aides.

106
Bryan

+= ajoute une autre valeur avec la valeur de la variable et affecte la nouvelle valeur à la variable.

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

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

86
Imran

+= ajoute un nombre à une variable, en modifiant la variable elle-même dans le processus (alors que + ne le ferait pas). Semblable à ceci, il y a ce qui suit qui modifie également la variable:

  • -=, soustrait une valeur de variable, définissant la variable sur le résultat
  • *=, multiplie la variable et une valeur, faisant du résultat la variable
  • /=, divise la variable par la valeur, transformant ainsi le résultat en variable
  • %=, effectue le module sur la variable, la variable étant alors définie sur le résultat

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

23
Ryan Bigg

x += 5 n'est pas exactement la même chose que 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?

21
Roshan Mehta

Il ajoute l'opérande droit à gauche. x += 2 signifie x = x + 2

Il peut également ajouter des éléments à une liste - voir ce fil SO .

16
Kaleb Brasee

Ce n'est pas un simple raccourci syntaxique. Essaye ça:

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

versus

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

Cela montre que + = invoque la méthode iadd list mais + invoque add , qui font des choses différentes avec des listes.

13
C S

Notamment, a + = b "ajoute" b à a stockant le résultat dans a. Cette description simpliste décrirait l'opérateur + = dans de nombreuses langues.

Cependant, la description simpliste soulève quelques questions.

  1. Qu'entendons-nous exactement par "ajouter"?
  2. Qu'entendons-nous exactement par "stocker le résultat dans un"? Les variables python ne stockent pas les valeurs directement, elles stockent les références aux objets.

En python, les réponses à ces deux questions dépendent du type de données de a.


Alors que veut dire exactement "ajouter"?

  • Pour les chiffres, cela signifie l'addition numérique.
  • Pour les listes, les nuplets, les chaînes, etc., cela signifie la concaténation.

Notez que pour les listes, + = est plus flexible que +, l'opérateur + sur une liste nécessite une autre liste, mais l'opérateur + = accepte toutes les valeurs itérables.


Alors que signifie "stocker la valeur dans un"? 

Si l'objet est modifiable, il est conseillé (mais pas obligatoire) d'effectuer la modification sur place. Ainsi, a pointe vers le même objet qu’il le faisait auparavant mais cet objet a maintenant un contenu différent.

Si l'objet est immuable, il ne peut évidemment pas effectuer la modification en place. Certains objets mutables peuvent également ne pas avoir d'implémentation d'une opération "ajouter" sur place. Dans ce cas, la variable "a" sera mise à jour pour pointer vers un nouvel objet contenant le résultat d'une opération d'addition.

Techniquement, ceci est implémenté en recherchant d'abord __IADD__; si cela n'est pas implémenté, alors __ADD__ est essayé et finalement __RADD__.


Vous devez faire attention lorsque vous utilisez + = en python sur des variables pour lesquelles nous ne sommes pas certains du type exact et en particulier lorsque nous ne sommes pas certains si le type est modifiable ou non. Par exemple, considérons le code suivant.

def dostuff(a):
    b = a
    a += (3,4)
    print(repr(a)+' '+repr(b))

dostuff((1,2))
dostuff([1,2])

Lorsque nous appelons dostuff avec un tuple, celui-ci est copié dans le cadre de l'opération + = et b n'est donc pas affecté. Cependant, lorsque nous l'invoquons avec une liste, celle-ci est modifiée sur place, de sorte que a et b sont affectés. 

En Python 3, un comportement similaire est observé avec les types "bytes" et "bytearray". 


Notez enfin que la réaffectation a lieu même si l'objet n'est pas remplacé. Cela n'a pas beaucoup d'importance si le côté gauche est simplement une variable, mais cela peut être source de confusion lorsque vous avez une collection immuable faisant référence à des collections mutables, par exemple: 

a = ([1,2],[3,4])
a[0] += [5]

Dans ce cas, [5] sera ajouté à la liste référencée par un [0] mais une exception sera ensuite déclenchée lorsque le code essaiera de ne pas réaffecter un [0].

7
plugwash
+= 

est juste un raccourci pour écrire 

numbers = 1
numbers = numbers + 1
print (numbers)   ## 2

Donc, au lieu de cela, vous écririez

numbers = 1
numbers += 1
print (numbers)   ## 2

Les deux manières sont correctes mais l'exemple deux vous aide à écrire un peu moins de code

3
Vash

La réponse courte est += peut être traduit par "ajoute tout ce qui se trouve à droite du + = dans la variable à gauche du + =".

Ex. Si vous avez a = 10 alors a += 5 serait: a = a + 5

Donc, "a" maintenant égal à 15. 

0
user10917993

Rappelez-vous que lorsque vous additionniez, par exemple 2 et 3, dans votre ancienne calculatrice et que chaque fois que vous appuyez sur le =, 3 s’ajoutent au total, le += effectue un travail similaire. Exemple:

>>> orange = 2
>>> orange += 3
>>> print(orange)
5
>>> orange +=3
>>> print(orange)
8
0
salhin

Comme d'autres l'ont également dit, l'opérateur + = est un raccourci . Un exemple:

var = 1;
var = var + 1;
#var = 2

Cela pourrait aussi être écrit comme ceci:

var = 1;
var += 1;
#var = 2

Ainsi, au lieu d'écrire le premier exemple, vous pouvez simplement écrire le second, ce qui fonctionnerait parfaitement.

0
ZeroFunter