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


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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM