Python中str()和repr()函式的區別

pythontab發表於2017-12-25

在 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'



相關文章