Почему вызов метода строки Python ничего не делает, если вы не назначите его вывод? - PullRequest
132 голосов
/ 08 февраля 2012

Я пытаюсь выполнить простую замену строки, но я не знаю, почему она не работает:

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

Я хочу изменить слово hello на goodbye, поэтому следует изменить строку "hello world" на "goodbye world". Но Х просто остается "hello world". Почему мой код не работает?

Ответы [ 2 ]

229 голосов
/ 08 февраля 2012

Это потому, что строки неизменны в 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()

и т. д.

0 голосов
/ 24 января 2018

Все строковые функции, такие как lower, upper, strip, возвращают строку без изменения оригинала. Если вы попытаетесь изменить строку, как вы думаете well it is an iterable, она потерпит неудачу.

x = 'hello'
x[0] = 'i' #'str' object does not support item assignment

Существует хорошее чтение о важности неизменяемости строк: Почему строки Python неизменяемы? Лучшие практики для их использования

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...