在 Python 中要將某一型別的變數或者常量轉換為字串物件通常有兩種方法,即 str() 或者 repr() 。
區別與使用
函式str() 用於將值轉化為適於人閱讀的形式,而repr() 轉化為供直譯器讀取的形式(如果沒有等價的語法,則會發生SyntaxError 異常), 適合開發和除錯階段使用。
>>> number = 123456789 >>> type(str(number)) <class 'str'> >>> type(repr(number)) <class 'str'> >>> print(repr(number)) 123456789 >>> print(str(number)) 123456789
兩個函式返回的型別是相同的,值也是相同的。
>>> print(str('123456789')) 123456789 >>> print(repr('123456789')) '123456789'
但當我們把一個字串傳給 str() 函式再列印到終端的時候,輸出的字元不帶引號。而將一個字串傳給 repr() 函式再列印到終端的時候,輸出的字元帶有引號。
造成這兩種輸出形式不同的原因在於:
print 語句結合 str() 函式實際上是呼叫了物件的 __str__ 方法來輸出結果。而 print 結合 repr() 實際上是呼叫物件的 __repr__ 方法輸出結果。下例中我們用 str 物件直接呼叫這兩個方法,輸出結果的形式與前一個例子保持一致。
>>> print('123456789'.__repr__()) '123456789' >>> print('123456789'.__str__()) 123456789
不同資料型別的不同處理
某物件沒有適於人閱讀的解釋形式的話, str() 會返回與repr()等同的值。很多型別,諸如數值或連結串列、字典這樣的結構,針對各函式都有著統一的處理方式。
程式碼例項:
>>> listA = [1,2,3] >>> str(listA) '[1, 2, 3]' >>> repr(listA) '[1, 2, 3]' >>>
結果是相同的。
而字串和浮點數,它們的處理方式不同。
注意:Python3和Python2版本str函式處理浮點數時是不同的,Python3版本下,str和repr會返回相同的結果,Python2下則不會, 具體看下面的例子:
Python3版本:
>>> string = 'Hello, PythonTab.com' >>> str(string) 'Hello, PythonTab.com' >>> repr(string) "'Hello, PythonTab.com'" >>> str(1.0/7.0) '0.14285714285714285' >>> repr(1.0/7.0) '0.14285714285714285'
Python2版本:
>>> str(1.0/7.0) '0.142857142857' >>> repr(1.0/7.0) '0.14285714285714285'