Вопрос-Ответ

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

Есть хорошее чтение о важности неизменяемости строк: Почему строки Python неизменяемы? Рекомендации по их использованию


2023-07-05 01:23 python string