78 votes

Pourquoi b+=(4,) fonctionne et b = b + (4,) ne fonctionne pas quand b est une liste ?

Si on prend b = [1,2,3] et si on essaie de faire : b+=(4,)

Il renvoie b = [1,2,3,4] , mais si nous essayons de faire b = b + (4,) cela ne fonctionne pas.

 b = [1,2,3]
b+=(4,) # Prints out b = [1,2,3,4]
b = b + (4,) # Gives an error saying you can't add tuples and lists

Je m'attendais à ce que b+=(4,) échoue car vous ne pouvez pas ajouter de liste et de tuple, mais cela a fonctionné. J'ai donc essayé b = b + (4,) espérant obtenir le même résultat, mais cela n'a pas fonctionné.

22voto

alfasin Points 19063

Ils ne sont pas équivalents :

 b += (4,)

est un raccourci pour :

 b.extend((4,))

tandis que + concatène les listes, donc par :

 b = b + (4,)

vous essayez de concaténer un tuple en une liste

15voto

Cherif Points 6554

Quand tu fais ça :

 b += (4,)

est converti en ceci :

 b.__iadd__((4,)) 

Sous le capot, il appelle b.extend((4,)) , extend accepte un itérateur et c'est pourquoi cela fonctionne également :

 b = [1,2,3]
b += range(2)  # prints [1, 2, 3, 0, 1]

mais quand tu fais ça :

 b = b + (4,)

est converti en ceci :

 b = b.__add__((4,)) 

n'accepte que l'objet liste.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X