为什么调用字符串方法(如 .replace 或 .strip)不改变字符串?
我试着用这段代码来做简单的字符串替换:
X = "hello world"
X.replace("hello", "goodbye")
为什么X
没有从"hello world"
变成"goodbye world"
呢?
2 个回答
0
所有的字符串函数,比如 lower
(变小写)、upper
(变大写)、strip
(去掉空格),都是返回一个新的字符串,而不会改变原来的字符串。如果你尝试去修改一个字符串,虽然你可能会觉得 它是可以迭代的
,但实际上是会失败的。
x = 'hello'
x[0] = 'i' #'str' object does not support item assignment
这里有一篇很好的文章,讲述了字符串不可变的重要性: 为什么Python中的字符串是不可变的?使用它们的最佳实践
261
这是因为在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()
等等。