2011-10-11 3 views
1

Qu'est-ce que cela signifie quand son comme celui-ci:Qu'est-ce que cela signifie + = en python?

self.something += ('somethin',) 

Que signifie « + = » et qu'est-ce que les moyens de virgule?

+0

Quant à la virgule: http://stackoverflow.com/questions/3750632/why-does-adding-a-trailing-comma-after-a-string-make-it-a-tuple –

Répondre

6

L'expression a += b est un raccourci pour a = a + b, où a et b peuvent être des nombres ou des chaînes, ou tuples, ou des listes (mais les deux doivent être du même type).

La virgule en ('x',) signifie qu'il s'agit d'un tuple d'un seul élément, 'x'. Si la virgule est absente, est juste 'x' entre parenthèses.

+0

[ pedantic] Ce n'est pas "raccourci" pour l'autre version. Vous pouvez le faire faire toutes sortes de choses ... – JBernardo

1

+= is addition and assignment into one (parfois appelé iadd ou ajout sur place). Il est le même que a = a + x

a = 4 
a += 5 # add 5 to a, and assign the result into a 
b = 4 
b = b + 5 # this does the same thing as += 
print a # prints out 9 
print b # prints out 9 

Vous pouvez également faire d'autres opérations dans ce style, comme -=, *=, /=, &= (niveau du bit et), |= (bitwise ou), ^= (XOR), %= (mod), **= (exposant).


('something',) est un tuple. ('something') (sans la virgule) utilise la parenthèse dans le regroupement, un peu comme ('some' + 'thing') ou (a + b). Afin de différencier syntaxiquement le tuple à un membre et le regroupement syntaxique, Python utilise une virgule.

2

Python a un opérateur pour attribuer une valeur à un nom et c'est =.

Le langage prend également en charge de nombreux autres opérateurs tels que +, -, ** pour les opérations définies dans les méthodes spéciales de vos objets.

Bien que + est le signe mathématique pour ajouter des choses, il peut être personnalisé pour faire ce que vous voulez. Parfois, vous voulez effectuer une opération et la stocker en utilisant le même nom. Pour ces situations, vous avez des opérateurs sur place qui ne sont que les opérateurs normaux auxquels vous êtes habitué plus le signe =.

Pour les objets immuables (nombres, chaînes, tuples, ...) vous ne pouvez pas avoir de changements sur place parce que ... ils sont immuables. Ainsi, les méthodes in situ font exactement la même chose que la méthode normale suivie d'une affectation.

Pour les objets mutables la différence est beaucoup plus claire:

en place ajouter:

>>> a = [] 
>>> b = a 
>>> b += [1,2] 
>>> a 
[1, 2] 

Ajouter et attribuer:

>>> a = [] 
>>> b = a 
>>> b = b + [1,2] 
>>> a 
[] 

Voir? L'objet lui-même a été transformé avec l'ajout sur place pour les listes, mais, dans l'autre cas, un nouvel objet a été créé.


Pour votre autre question, la virgule est le séparateur de tuple.

a = (1) # Just number 1 inside parenthesis 
a = (1,) # A tuple with one element