/ / Pourquoi l'appel d'une méthode de chaîne Python ne fonctionne-t-il que si vous attribuez sa sortie? - python, chaîne, remplacer

Pourquoi l'appel d'une méthode de chaîne Python ne fait-il rien à moins que vous n'affectiez sa sortie? - python, chaîne, remplacer

J'essaie de remplacer une chaîne simple, mais je ne sais pas pourquoi cela ne semble pas fonctionner:

X = "hello world"
X.replace("hello", "goodbye")

Je veux changer le mot hello à goodbyedonc il faut changer la chaîne "hello world" à "goodbye world". Mais X reste juste "hello world". Pourquoi mon code ne fonctionne pas?

Réponses:

207 pour la réponse № 1

Ceci est dû au fait les chaînes sont immuables en Python.

Ce qui signifie que X.replace("hello","goodbye") résultats une copie de X avec des remplacements faits. Pour cette raison, vous devez remplacer cette ligne:

X.replace("hello", "goodbye")

avec cette ligne:

X = X.replace("hello", "goodbye")

Plus généralement, Cela est vrai pour toutes les méthodes de chaîne Python qui changent le contenu d'une chaîne "sur place", par exemple. replace,strip,translate,lower/upper,join,...

Vous devez affecter leur sortie à quelque chose si vous voulez l'utiliser et ne pas le jeter, par exemple

X  = X.strip(" t")
X2 = X.translate(...)
Y  = X.lower()
Z  = X.upper()
A  = X.join(":")
B  = X.capitalize()
C  = X.casefold()

etc.


0 pour la réponse № 2

Toutes les chaînes fonctionnent comme lower, upper, strip retournent 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 y a une bonne lecture sur l'importance de l'immuabilité des chaînes: Pourquoi les chaînes Python sont-elles immuables? Les meilleures pratiques pour les utiliser