Cet article vous apporte une brève introduction à l'affectation incrémentielle de séquence en Python (avec des exemples). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Les opérateurs d'affectation incrémentielle sont += et *=. La méthode spéciale derrière += est __iadd__ Si une classe n'implémente pas la méthode __iadd__, Python prendra du recul et l'appellera. Méthode __add__. La différence entre ces deux méthodes est que __iadd__ est un changement sur place et ne modifiera pas l'adresse mémoire de la valeur d'origine, tandis que la méthode __add__ obtiendra un nouvel objet.
Considérez l'expression suivante :
a += b
Si a implémente la méthode __iadd__, a sera modifié sur place (l'adresse mémoire reste inchangée). Si a n'implémente pas la méthode __iadd__, alors l'effet de l'expression a += b devient le même que a = a + b, générant un nouvel objet et l'attribuant à a.
De manière générale, les séquences mutables implémentent généralement la méthode __iadd__, donc += est un ajout sur place, alors que les séquences immuables ne prennent pas du tout en charge cette opération.
*= est identique à +=, sauf que la méthode spéciale derrière est __imul__.
a = [1, 2, 3] b = [4, 5, 6]print("id(a) = %d" % id(a)) a += bprint("id(a) = %d" % id(a)) c = [1, 2, 3]print("id(c) = %d" % id(c)) c = c + bprint("id(c) = %d" % id(c)) d = (1, 2, 3)print("id(d) = %d" % id(d)) d *= 2print("id(d) = %d" % id(d))
Les résultats en cours d'exécution sont les suivants :
id(a) = 1298277978824 id(a) = 1298277978824 id(c) = 1298277978696 id(c) = 1298277978632 id(d) = 1298277972872 id(d) = 1298277136616
Compréhension la séquence Affectation incrémentale, regardons le puzzle évoqué par Leonardo Rochael lors de la Python Brazil Conference en 2013 :
t = (1, 2, [30, 40]) t[2] += [50, 60]
A. t devient ( 1, 2, [30, 40, 50, 60])
B. Étant donné que le tuple ne prend pas en charge l'affectation à ses éléments, une exception TypeError sera levée
C les deux No<.>
D. A et B sont correctsJe suppose que beaucoup de gens choisiront B comme moi, mais en fait la réponse est D. Exécutez le code sur la console et les résultats sont les suivants :Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!