web-dev-qa-db-ja.com

出力を割り当てない限り、Python文字列メソッドを呼び出さないのはなぜですか?

私は単純な文字列置換を試みますが、なぜそれが機能しないように見えるのかわかりません:

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

Word hellogoodbyeに変更したいので、文字列"hello world""goodbye world"に変更する必要があります。しかし、Xは"hello world"のままです。コードが機能しないのはなぜですか?

132
Katherina

これは、Pythonでは文字列は不変であるためです。

つまり、X.replace("hello","goodbye")置換されたXのコピーを返します。そのため、次の行を置き換える必要があります。

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

この行で:

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

より広く言えば、これは、文字列のコンテンツを「その場で」変更するすべてのPython文字列メソッドに当てはまります、例えばreplacestriptranslatelower/upperjoin、...

使用する場合は、出力を何かに割り当てる必要があります破棄せずに、たとえば.

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

等々。

229
Tadeck

lowerupperstripなどのすべての文字列関数は、元の文字列を変更せずに文字列を返します。 well it is an iterableと思われる文字列を変更しようとすると、失敗します。

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

文字列が不変であることの重要性についての良い読み物があります: なぜPython文字列は不変ですか?それらを使用するためのベストプラクティス

0
user1767754