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.
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.
+=
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.
+=
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ésultatIl y en a peut-être d'autres. Je ne suis pas un programmeur Python.
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?
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 .
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.
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.
En python, les réponses à ces deux questions dépendent du type de données de a.
Alors que veut dire exactement "ajouter"?
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].
+=
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
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.
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
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.