Why doesn't calling a string method (such as .replace or .strip) modify (mutate) the string?
Почему вызов строкового метода (такого как .replace или .strip) не изменяет (мутирует) строку?
Я попробовал этот код для простой замены строки:
X = "hello world" X.replace("hello", "goodbye")
Почему не X меняется с "hello world" на "goodbye world"?
Переведено автоматически
Ответ 1
Это потому, что строки неизменяемы в Python.
Это означает, что X.replace("hello","goodbye") возвращает копию X с произведенными заменами. Из-за этого вам необходимо заменить эту строку:
X.replace("hello", "goodbye")
с помощью этой строки:
X = X.replace("hello", "goodbye")
В более широком смысле, это верно для всех строковых методов Python, которые изменяют содержимое строки, например replace,strip,translate,lower/upper,join,...
Вы должны присвоить их выходные данные чему-либо, если хотите это использовать, а не выбрасывать, например
X = X.strip(' \t') X2 = X.translate(...) Y = X.lower() Z = X.upper() A = X.join(':') B = X.capitalize() C = X.casefold()
и так далее.
Ответ 2
Все строковые функции, такие как lower, upper, strip возвращают строку без изменения оригинала. Если вы попытаетесь изменить строку, как вы могли подумать well it is an iterable, это завершится неудачей.
x = 'hello' x[0] = 'i'#'str' object does not support item assignment