2012-02-08 27 views
109

tôi cố gắng để làm một sự thay thế chuỗi đơn giản, nhưng tôi không biết tại sao nó dường như không làm việc:Tại sao không gọi một phương thức chuỗi Python làm bất cứ điều gì trừ khi bạn chỉ định đầu ra của nó?

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

Tôi muốn thay đổi từ hello-goodbye, do đó nó nên thay đổi chuỗi "hello world" đến "goodbye world". Nhưng X chỉ còn lại "hello world". Tại sao mã của tôi không hoạt động?

Trả lời

202

Điều này là do các chuỗi không thay đổi được trong Python.

Điều đó có nghĩa là X.replace("hello","goodbye") trả về bản sao của X với các thay thế được thực hiện. Do đó bạn cần thay thế dòng này:

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

với dòng này:

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

Nói rộng hơn, điều này là đúng cho tất cả các phương pháp chuỗi Python mà thay đổi nội dung của một chuỗi "tại chỗ" , ví dụ replace, strip, translate, lower/upper, join ...

Bạn phải gán sản lượng của họ đến một cái gì đó nếu bạn muốn sử dụng nó và không vứt nó đi, ví dụ

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

v.v.

+7

Nó [được đề xuất rằng câu hỏi này được sử dụng như một mục tiêu trùng lặp cho vấn đề chung này] (http://meta.stackoverflow.com/a/287175/603977). Câu hỏi là rõ ràng và ngắn gọn, như câu trả lời của bạn, làm cho họ trở thành một cặp tuyệt vời. Cho rằng, làm thế nào bạn sẽ cảm thấy về việc mở rộng một chút câu trả lời của bạn để đề cập đến một cái gì đó dọc theo dòng "... và điều này là đúng _for tất cả các phương pháp có thể thay đổi nội dung của chuỗi"? –

+1

@JoshCaswell: Cuối cùng tôi đã tiếp tục và thực hiện những chỉnh sửa đó ngay bây giờ cho câu trả lời của Tadeck. Tốt hơn (và nhanh hơn) để yêu cầu sự tha thứ hơn sự cho phép ... đặc biệt là kể từ khi chúng tôi đưa ra câu trả lời kinh điển cho việc giải quyết các câu hỏi như vậy. – smci

0

Tất cả các hàm chuỗi là lower, upper, strip đang trả về một chuỗi mà không sửa đổi bản gốc. Nếu bạn cố gắng sửa đổi một chuỗi, như bạn có thể nghĩ rằng well it is an iterable, nó sẽ thất bại.

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

Có một đọc tốt về tầm quan trọng của chuỗi là bất di bất dịch: Why are Python strings immutable? Best practices for using them

Các vấn đề liên quan