HOWTO · Python
Python 中與 tostring() 等效的操作
瞭解 Python 中取代 tostring() 的工具:用 str() 轉換值,用 join() 串接字串,用 f-strings 或 str.format() 建立範本,並用 __str__() 自訂物件。
本頁內容
Python 沒有名為 tostring() 的方法;Java 中對應的方法拼寫為 toString()。需要取得單一值的字串表示時,請使用內建函式 str(value);需要合併多個字串時使用 join();需要建立訊息時使用 f-strings 或 str.format()。這些操作產生的是顯示文字,而不是通用序列化格式。
使用 str() 轉換值
str() 可為數字、集合以及大多數其他 Python 物件傳回字串。它直接回答了「Python 中與 tostring() 等效的操作是什麼」這個問題。對於集合,結果是其可讀表示,其中包括分隔符號和各元素的表示。
number = 123
values = [1, 2, 3]
print(str(number))
print(str(values))
輸出:
123
[1, 2, 3]
兩次呼叫的結果都是 str。以這種方式轉換字典或串列並不會產生 JSON、CSV 或其他交換格式。如果另一個程式需要可靠地讀取資料,請使用對應格式的專用程式庫。
串接字串和混合值
應在分隔符號上呼叫 join(),而不是在串列上呼叫。傳給 join() 的每個元素都必須已經是字串。這個重要限制區分了字串串接與一般轉換。
words = ["Hello", "world", "from", "Python"]
sentence = " ".join(words)
mixed = "|".join(map(str, [1, "two", None]))
print(sentence)
print(mixed)
輸出:
Hello world from Python
1|two|None
對於包含數字或其他物件的可疊代物件,map(str, values) 會在串接前轉換每個元素。像 ", ".join(["one", 2]) 這樣直接呼叫會引發 TypeError,因為 join() 不會隱含轉換非字串元素。
使用 f-strings 格式化值
如果訊息中包含值,而且在撰寫程式碼的位置已經知道範本,請使用 f-string。大括號中的運算式會被求值,並在格式化過程中完成轉換。格式規格可以控制精確度、寬度以及其他顯示細節。
name = "Ada"
score = 3.14159
message = f"{name} scored {score:.2f}"
print(message)
輸出:
Ada scored 3.14
F-strings 在 Python 3.6 中引入,並且可用於目前的 Python 3.14 系列。對於區域性且易讀的範本,它們通常是最清楚的選擇,但不應用來序列化要傳給其他系統的資料。
使用 str.format() 處理範本
如果範本單獨儲存、需要重複使用,或必須支援早於 f-strings 的程式碼,str.format() 會很有用。它在取代編號欄位或命名欄位的同時轉換傳入的值。
item = "apple"
quantity = 5
message = "I have {quantity} {item}s.".format(quantity=quantity, item=item)
print(message)
輸出:
I have 5 apples.
當範本包含多個值時,請優先使用命名欄位,這樣更容易看清每個預留位置與其值之間的關係。對於使用行內範本的新程式碼,f-string 通常更簡短。
為自訂物件定義 __str__()
如果你的類別需要實用且便於閱讀的表示,請實作 __str__()。Python 會在計算 str(instance) 以及 print() 顯示執行個體時呼叫它。該方法必須傳回字串,不能傳回數字或其他物件。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name} ({self.age})"
person = Person("Ada", 36)
print(str(person))
輸出:
Ada (36)
應讓 __str__() 保持簡潔並便於人們閱讀。__repr__() 有不同的用途,主要面向除錯和開發人員;定義其中一個並不能取代另一個。
限制與方法摘要
請根據所需的結果選擇相應操作:
- 對於單一值或集合的可讀表示,使用
str(value)。 - 使用
separator.join(strings)合併字串;必要時先用map(str, values)轉換元素。 - 可讀的行內範本使用 f-strings,可重複使用或單獨儲存的範本使用
str.format()。 - 如果你自己的類別需要便於人們閱讀的表示,請實作
__str__()。
這些方法不能保證產生可逆或機器可讀的表示。處理 JSON 時,請使用 json.dumps(),並處理 JSON 無法表示的型別。對於自訂傳輸格式,應明確定義其結構描述,而不是依賴 str() 的輸出。
簡而言之,用 str(value) 取代 Java 風格的 tostring() 呼叫,然後根據串接、格式化或自訂文字的具體工作,選擇 join()、f-string、str.format() 或 __str__()。