2011-01-30 2 views
42

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 courts en python.Que fait + = exactement en python?

+4

['objet .__ iadd__'] (http: // doc s.python.org/reference/datamodel.html#object.__iadd__) – ephemient

+2

c'est un opérateur de base pour python (et beaucoup d'autres langues aussi), vous devriez commencer par google, si vous ne lisez jamais de références python. – technomage

+1

@AndiDog Bien qu'il soit vrai que les deux questions concernent l'opérateur (+ =), celui que vous avez lié concerne un usage sophistiqué et un problème subtil, et l'OP ici n'est probablement pas capable de suivre le raisonnement (encore). –

Répondre

53

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

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

-=, *=, /=-t similaire pour la soustraction, la multiplication et la division.

+9

"lui-même" est en fait une très mauvaise description ici, car les entiers sont immuables. – AndiDog

13

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

Il peut également ajouter des éléments à une liste - voir this SO thread.

14

+= ajoute un nombre à une variable, en changeant la variable elle-même dans le processus (alors que + ne le ferait pas). Semblable à cela, il y a les éléments suivants qui modifie également la variable:

  • -=, soustraient une valeur de variable définissant la variable au résultat
  • *=, multiplie la variable et une valeur, ce qui rend le résultat du la variable
  • /=, divise la variable par la valeur, ce qui rend le résultat de la variable
  • %=, exécute le module de la variable, la variable étant alors réglé sur le résultat de celui-ci

Il peut y en avoir d'autres. Je ne suis pas un programmeur Python.

+0

Pour les chiffres, cette réponse est correcte. (Voir [la réponse de Bryan] (https://stackoverflow.com/a/4845327/241211) pour un comportement spécial.) Il y a [en effet] (https://docs.python.org/3.1/library/operator.html# operator.iadd) plusieurs autres, y compris les opérateurs au niveau du bit ('& =', '>> =', etc.) et des opérateurs mathématiques supplémentaires ('** =', etc.). – Michael

75

En Python, + = est un revêtement de sucre pour la méthode spéciale __iadd__, ou __add__ ou __radd__ si aucun __iadd__ n'est présent. La méthode __iadd__ 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 classe personnalisée simple qui implémente la méthode spéciale __iadd__. Vous initialisez l'objet avec un int, puis vous pouvez utiliser l'opérateur + = pour ajouter un nombre. J'ai ajouté une instruction d'impression dans __iadd__ pour montrer qu'il est appelé. En outre, __iadd__ devrait renvoyer un objet, donc j'ai renvoyé l'addition de lui-même plus l'autre nombre qui a du sens 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 

Espérons que cela aide.

+7

Bien que ce ne soit pas ce que recherchait l'Asker, +1 pour la vraie réponse. =) – Michael

+0

@Michael, c'est là que l'humour ajoute au fait ... :-D –

-1

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

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

Il 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, qui fonctionne très bien.

8

Ce n'est pas un simple raccourci 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 

Cela montre que + = appelle la méthode de la liste DSAI mais + invoque ajouter, qui font des choses différentes avec des listes.

6

x += 5 n'est pas exactement identique à dire x = x + 5 en Python.

Remarque 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: Why does += behave unexpectedly on lists?

-1

Rappelez-vous quand vous avez utilisé pour résumer, par exemple 2 & 3, dans votre vieille calculatrice et chaque fois que vous appuyez sur la = vous voyez 3 ajouté au total, le += fait un travail similaire. Exemple:

>>> orange = 2 
>>> orange += 3 
>>> print(orange) 
5 
>>> orange +=3 
>>> print(orange) 
8 
1
+= 

est juste un raccourci pour écrire

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

Ainsi, au lieu que vous écririez

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

Les deux voies sont correctes, mais par exemple deux, vous aide à écrire un peu moins code