Çıktısını atamadıkça neden bir Python string yöntemi çağırmak bir şey yapmıyor?


136

Basit bir dize değiştirme yapmaya çalışıyorum, ama neden işe yaramaz gibi görünmüyor:

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

Kelimesini değiştirmek istiyorum helloiçin goodbye, böylece dize değiştirmelisiniz "hello world"için "goodbye world". Ama X kaldı "hello world". Kodum neden çalışmıyor?

Yanıtlar:


232

Bunun nedeni , Python'da dizelerin değişmez olmasıdır .

Başka bir deyişle, yapılan değiştirmelerin bir kopyasınıX.replace("hello","goodbye") döndürür . Bu nedenle bu satırı değiştirmeniz gerekir:X

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

bu çizgi ile:

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

Daha geniş anlamda, bu "yerinde" Bir dizgenin içeriğini değiştirmek tüm Python dize yöntemleri için de geçerlidir , örneğin replace, strip, translate, lower/ upper, join...

Kullanmak ve atmak istemiyorsanız çıkışlarını bir şeye atamanız gerekir , örn.

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

ve bunun gibi.


1
Bilgiçlik noktası: teller x += 'a'özel durum için değiştirilebilir, örneğin stackoverflow.com/a/40996908/6260170
Chris_Rands

@Chris_Rands: Haklı görünüyorsunuz, ancak dışarıdan gerçek bir mutasyon kabiliyeti yok - bazı uygulamalar bunun gerçekten kullanılıp kullanılmadığını kontrol ediyor ve eğer değilse (değişebilirlik gözlenmeyecek), aslında mutasyona uğrayacaktır. Bu doğru mu?
Tadeck

@Tadeck Bence gerçek ama sadece bir CPython optimizasyonu ve burada doğrudan alakalı değil (bu yüzden
bilgiç

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.