Tu penses à l'envers. Vous demandez pourquoi x = x + 'ha'
déclenche une exception, étant donné que x += 'ha'
fonctionne. Vraiment, la question est pourquoi x += 'ha'
fonctionne du tout.
Tout le monde est d'accord (j'espère) que 'abc' + 'ha'
et [1, 2, 3] + ['h', 'a']
devraient fonctionner. Et dans ces cas, surcharger +=
pour effectuer une modification sur place semble raisonnable.
Les concepteurs de langage ont décidé que [1, 2, 3] + 'ha'
ne devrait pas, parce que vous mélangez différents types. Et cela semble raisonnable aussi.
Donc la question est pourquoi ils ont décidé de de mélanger différents types dans le cas de x += 'ha'
. Dans ce cas, je suppose qu'il ya des raisons de couple:
- Il est un raccourci pratique
- Il est évident ce qui se passe (vous ajoutez chacun des éléments de la itérables à
x
)
En général , Python essaie de vous laisser faire ce que vous voulez, mais là où il y a de l'ambiguïté, cela tend à vous forcer à être explicite.
Je suis d'accord avec votre question; c'est un bon argument contre la surcharge de l'opérateur pour moi. – u0b34a0f6ae
J'ai supprimé ma réponse après votre modification - il semble que vous vous interrogiez sur la raison derrière ne pas soutenir + entre une liste et un itérable - mon erreur. A part de dire "Ouais, pourquoi pas?", Je n'ai pas de réponse. –
c'est une casse * majeure *. plus généralement, tout langage ou bibliothèque qui définit des comportements différents pour des opérateurs de même apparence doit être considéré comme hostile à l'utilisateur. personne n'utiliserait '+' pour la concaténation de chaînes: cette opération n'est pas commutative! –