J'essaie de faire un simple remplacement de chaîne, mais je ne sais pas pourquoi cela ne semble pas fonctionner:
X = "hello world"
X.replace("hello", "goodbye")
Je veux changer le mot hello
en goodbye
, il devrait donc changer la chaîne "hello world"
à "goodbye world"
. Mais X reste juste "hello world"
. Pourquoi mon code ne fonctionne pas?
C'est parce que les chaînes sont immuables en Python.
Ce qui signifie que X.replace("hello","goodbye")
renvoie ne copie de X
avec les remplacements effectués. Pour cette raison, vous devez remplacer cette ligne:
X.replace("hello", "goodbye")
avec cette ligne:
X = X.replace("hello", "goodbye")
Plus généralement, ceci vaut pour toutes les méthodes Python qui modifient le contenu d'une chaîne "sur place", par exemple, replace
, strip
, translate
, lower
/upper
, join
, ...
Vous devez assigner leur sortie à quelque chose si vous voulez l’utiliser et ne pas la jeter, par ex.
X = X.strip(' \t')
X2 = X.translate(...)
Y = X.lower()
Z = X.upper()
A = X.join(':')
B = X.capitalize()
C = X.casefold()
etc.
Toutes les fonctions de chaîne telles que lower
, upper
, strip
renvoient une chaîne sans modifier l'original. Si vous essayez de modifier une chaîne, comme vous pourriez le penser, well it is an iterable
, ça va échouer.
x = 'hello'
x[0] = 'i' #'str' object does not support item assignment
Il existe une bonne lecture sur l’importance que les chaînes soient immuables: Pourquoi les chaînes Python sont-elles immuables? Les meilleures pratiques pour les utiliser