J'ai besoin de savoir ce que + = fait en python. C'est si simple. J'apprécierais également des liens vers des définitions d'autres outils à main courte en python.
c'est un opérateur de base pour python (et de nombreux autres langages aussi), vous devriez commencer par google, si vous ne lisez jamais de références python.
technomage
3
@AndiDog Bien qu'il soit vrai que les deux questions concernent l'opérateur (+ =), celle que vous avez liée concerne un usage sophistiqué et un problème subtil, et l'OP ici n'est probablement pas en mesure de suivre (encore) le raisonnement.
Dr. belisarius
3
@AndiDog Vous aviez peut-être raison à ce moment-là, mais en regardant les solutions (presque) acceptées ici, il est clair que cette question concerne une compréhension de base de l'opérateur: D
En Python, + = est l'enrobage de sucre pour la __iadd__méthode spéciale, ou __add__ou __radd__si __iadd__n'est pas présent. La __iadd__méthode d'une classe peut faire tout ce qu'elle veut. L'objet list 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 simple classe personnalisée qui implémente la __iadd__méthode spéciale. Vous initialisez l'objet avec un int, puis pouvez utiliser l'opérateur + = pour ajouter un nombre. J'ai ajouté une instruction d'impression __iadd__pour montrer qu'elle est appelée. De plus, __iadd__on s'attend à ce qu'il retourne un objet, j'ai donc renvoyé l'addition de lui-même plus l'autre nombre qui a du sens dans ce cas.
>>>classAdder(object):def __init__(self, num=0):
self.num = numdef __iadd__(self, other):print'in __iadd__', other
self.num = self.num + otherreturn self.num>>> a =Adder(2)>>> a +=3in __iadd__ 3>>> a5
Bien que ce ne soit pas ce que recherchait le demandeur, +1 pour la vraie réponse. =)
Michael
@Michael, c'est là que l'humour ajoute au fait ... :-D
Aaron John Sabu
3
+1 pour répondre à la question, mais -1 pour un __iadd__qui renvoie un type différent (qui lui-même peut être ajouté)
Caleth
Cette réponse est trop complexe pour le type de personne qui aurait besoin de demander ce que signifie + = (c'est-à-dire un débutant). Votre réponse n'est pas une réponse de débutant, non seulement parce que les débutants ne commencent généralement pas à apprendre Python de manière orientée objet, mais aussi parce qu'il existe des réponses beaucoup plus simples (comme @ Imran ci-dessous). Juste mes deux cents, même si j'apprécie cette réponse.
q-compute
129
+= ajoute une autre valeur avec la valeur de la variable et affecte la nouvelle valeur à la variable.
>>> x =3>>> x +=2>>>print x5
-=, *=, /=Fait similaire pour la soustraction, la multiplication et la division.
«lui-même» est en fait une très mauvaise description ici, car les entiers sont immuables.
AndiDog
41
x += 5n'est pas exactement la même chose que de dire x = x + 5en Python.
Notez ici:
In[1]: x =[2,3,4]In[2]: y = x In[3]: x +=7,8,9In[4]: xOut[4]:[2,3,4,7,8,9]In[5]: yOut[5]:[2,3,4,7,8,9]In[6]: x +=[44,55]In[7]: xOut[7]:[2,3,4,7,8,9,44,55]In[8]: yOut[8]:[2,3,4,7,8,9,44,55]In[9]: x = x +[33,22]In[10]: xOut[10]:[2,3,4,7,8,9,44,55,33,22]In[11]: yOut[11]:[2,3,4,7,8,9,44,55]
+=ajoute un nombre à une variable, en modifiant la variable elle-même dans le processus (alors que +ce ne serait pas le cas). Similaire à cela, il y a les éléments suivants qui modifient é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, faisant du résultat la variable
%=, effectue un module sur la variable, la variable étant alors définie sur le résultat de celle-ci
Il peut y en avoir d'autres. Je ne suis pas un programmeur Python.
Pour les nombres, cette réponse est correcte. (Voir la réponse de Bryan pour un comportement spécial.) Il y a en effet plusieurs autres, y compris les opérateurs binaires ( &=, >>=, etc.) et les opérateurs de mathématiques supplémentaires ( **=, etc.).
Michael
16
Il ajoute l'opérande de droite à gauche. x += 2veux direx = x + 2
Il peut également ajouter des éléments à une liste - voir ce fil SO .
Notamment a + = b "ajoute" b à a en 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.
Qu'entend-on exactement par «ajouter»?
Qu'entend-on exactement par «stocker le résultat dans un»? Les variables python ne stockent pas directement les valeurs, 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 signifie exactement «ajouter»?
Pour les nombres, cela signifie une addition numérique.
Pour les listes, les tuples, les chaînes, etc., cela signifie 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 + = acceptera tout itérable.
Alors, que signifie «stocker la valeur dans un»?
Si l'objet est mutable, il est encouragé (mais pas obligatoire) à effectuer la modification sur place. Ainsi, a pointe vers le même objet qu'avant, mais cet objet a maintenant un contenu différent.
Si l'objet est immuable, il ne peut évidemment pas effectuer la modification sur place. Certains objets modifiables peuvent également ne pas avoir une implémentation d'une opération "d'ajout" 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, cela est mis en œuvre en recherchant d' __IADD__abord, si cela n'est pas implémenté, alors __ADD__est essayé et enfin __RADD__.
Des précautions sont nécessaires lors de l'utilisation de + = en python sur des variables dont nous ne sommes pas certains du type exact et en particulier lorsque nous ne sommes pas certains si le type est mutable ou non. Par exemple, considérez 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, le tuple est copié dans le cadre de l'opération + = et donc b n'est pas affecté. Cependant, lorsque nous l'appelons avec une liste, la liste est modifiée sur place, donc 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 se produit 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 provoquer un comportement déroutant 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é avec succès à la liste référencée par un [0] mais ensuite une exception sera déclenchée lorsque le code essaiera et échouera de réaffecter un [0].
Qu'est-ce que cette réponse apporte qui n'a pas déjà été discutée? C'est une réponse en double ...
jdv, essayant juste d'aider. Je suis un nouveau contributeur, désolé si vous pensez que ma réponse était un double.
Il est clair que c'est un doublon si vous regardez la plupart des autres réponses. C'est bien de contribuer, mais vous devriez vous efforcer de contribuer quelque chose de nouveau (par exemple, comme la réponse add vs iadd) ou vous voulez essayer une solution plus claire. Mais, pour autant que je sache, les réponses les plus votées sont à peu près aussi claires que possible pour une réponse de base.
4
La remarque x += yn'est pas la même que x = x + ydans certaines situations où un opérateur supplémentaire est inclus en raison de la priorité des opérateurs combinée au fait que le côté droit est toujours évalué en premier, par exemple
>>> x =2>>> x +=2and1>>> x
3>>> x =2>>> x = x +2and1>>> x
1
Notez que le premier cas se développe en:
>>> x =2>>> x = x +(2and1)>>> x
3
Vous êtes plus susceptible de rencontrer cela dans le «monde réel» avec d'autres opérateurs, par exemple
Rappelez-vous quand vous aviez l'habitude de faire la somme, par exemple 2 et 3, dans votre ancienne calculatrice et à chaque fois que vous frappez le, =vous voyez 3 ajouté au total, le +=travail est similaire. Exemple:
x += yéquivaut à x = operator.iadd(x, y). Une autre façon de le dire est de dire que cela z = operator.iadd(x, y)équivaut à l'instruction composée z = x; z += y.
object.__iadd__
Réponses:
En Python, + = est l'enrobage de sucre pour la
__iadd__
méthode spéciale, ou__add__
ou__radd__
si__iadd__
n'est pas présent. La__iadd__
méthode d'une classe peut faire tout ce qu'elle veut. L'objet list 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 simple classe personnalisée qui implémente la
__iadd__
méthode spéciale. Vous initialisez l'objet avec un int, puis pouvez utiliser l'opérateur + = pour ajouter un nombre. J'ai ajouté une instruction d'impression__iadd__
pour montrer qu'elle est appelée. De plus,__iadd__
on s'attend à ce qu'il retourne un objet, j'ai donc renvoyé l'addition de lui-même plus l'autre nombre qui a du sens dans ce cas.J'espère que cela t'aides.
la source
__iadd__
qui renvoie un type différent (qui lui-même peut être ajouté)+=
ajoute une autre valeur avec la valeur de la variable et affecte la nouvelle valeur à la variable.-=
,*=
,/=
Fait similaire pour la soustraction, la multiplication et la division.la source
x += 5
n'est pas exactement la même chose que de direx = x + 5
en Python.Notez ici:
Voir pour référence: Pourquoi + = se comporte-t-il de manière inattendue sur les listes?
la source
x += 7,8,9
+=
ajoute un nombre à une variable, en modifiant la variable elle-même dans le processus (alors que+
ce ne serait pas le cas). Similaire à cela, il y a les éléments suivants qui modifient é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, faisant du résultat la variable%=
, effectue un module sur la variable, la variable étant alors définie sur le résultat de celle-ciIl peut y en avoir d'autres. Je ne suis pas un programmeur Python.
la source
&=
,>>=
, etc.) et les opérateurs de mathématiques supplémentaires (**=
, etc.).Il ajoute l'opérande de droite à gauche.
x += 2
veux direx = x + 2
Il peut également ajouter des éléments à une liste - voir ce fil SO .
la source
Ce n'est pas un simple raccourci syntaxique. Essaye ça:
contre
Ceci illustre que + = invoque la méthode de liste iadd mais + appelle add , qui fait différentes choses avec les listes.
la source
Notamment a + = b "ajoute" b à a en 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 signifie 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 + = acceptera tout itérable.
Alors, que signifie «stocker la valeur dans un»?
Si l'objet est mutable, il est encouragé (mais pas obligatoire) à effectuer la modification sur place. Ainsi, a pointe vers le même objet qu'avant, mais cet objet a maintenant un contenu différent.
Si l'objet est immuable, il ne peut évidemment pas effectuer la modification sur place. Certains objets modifiables peuvent également ne pas avoir une implémentation d'une opération "d'ajout" 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, cela est mis en œuvre en recherchant d'
__IADD__
abord, si cela n'est pas implémenté, alors__ADD__
est essayé et enfin__RADD__
.Des précautions sont nécessaires lors de l'utilisation de + = en python sur des variables dont nous ne sommes pas certains du type exact et en particulier lorsque nous ne sommes pas certains si le type est mutable ou non. Par exemple, considérez le code suivant.
Lorsque nous appelons dostuff avec un tuple, le tuple est copié dans le cadre de l'opération + = et donc b n'est pas affecté. Cependant, lorsque nous l'appelons avec une liste, la liste est modifiée sur place, donc 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 se produit 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 provoquer un comportement déroutant lorsque vous avez une collection immuable faisant référence à des collections mutables par exemple:
Dans ce cas, [5] sera ajouté avec succès à la liste référencée par un [0] mais ensuite une exception sera déclenchée lorsque le code essaiera et échouera de réaffecter un [0].
la source
La réponse courte
+=
peut être traduite par "ajouter ce qui se trouve à droite du + = à la variable à gauche du + =".Ex. Si vous avez
a = 10
alors cea += 5
serait:a = a + 5
Donc, "a" est maintenant égal à 15.
la source
La remarque
x += y
n'est pas la même quex = x + y
dans certaines situations où un opérateur supplémentaire est inclus en raison de la priorité des opérateurs combinée au fait que le côté droit est toujours évalué en premier, par exempleNotez que le premier cas se développe en:
Vous êtes plus susceptible de rencontrer cela dans le «monde réel» avec d'autres opérateurs, par exemple
x *= 2 + 1
==x = x * (2 + 1)
! =x = x * 2 + 1
la source
+=
est juste un raccourci pour écrireAlors à la place tu écrirais
Les deux méthodes sont correctes mais l'exemple deux vous aide à écrire un peu moins de code
la source
Comme d'autres l'ont également dit, l'opérateur + = est un raccourci. Un exemple:
Cela pourrait aussi être écrit comme ceci:
Donc, au lieu d'écrire le premier exemple, vous pouvez simplement écrire le second, qui fonctionnerait très bien.
la source
Rappelez-vous quand vous aviez l'habitude de faire la somme, par exemple 2 et 3, dans votre ancienne calculatrice et à chaque fois que vous frappez le,
=
vous voyez 3 ajouté au total, le+=
travail est similaire. Exemple:la source
Je vois beaucoup de réponses qui n'évoquent pas l'utilisation de + = avec plusieurs entiers.
Un exemple:
Ce serait similaire à:
et pas:
la source
Selon la documentation
C'est donc
x += 3
le même quex = x + 3
.produira 5.
Notez qu'il y a aussi
la source