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

在 Python 中要將某一類型的變量或者常量轉換爲字符串對象一般有兩種方法,即 str() 或者 repr() 。python

區別與使用
函數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() 函數再打印到終端的時候,輸出的字符帶有引號。對象

形成這兩種輸出形式不一樣的緣由在於:blog

print 語句結合 str() 函數其實是調用了對象的 __str__ 方法來輸出結果。而 print 結合 repr() 其實是調用對象的 __repr__ 方法輸出結果。下例中咱們用 str 對象直接調用這兩個方法,輸出結果的形式與前一個例子保持一致。開發

>>> print('123456789'.__repr__())
'123456789'
>>> print('123456789'.__str__())
123456789

 

不一樣數據類型的不一樣處理
某對象沒有適於人閱讀的解釋形式的話, str() 會返回與repr()等同的值。不少類型,諸如數值或鏈表、字典這樣的結構,針對各函數都有着統一的處理方式。字符串

代碼實例:string

>>> listA = [1,2,3]
>>> str(listA)
'[1, 2, 3]'
>>> repr(listA)
'[1, 2, 3]'
>>>

 

結果是相同的。
而字符串和浮點數,它們的處理方式不一樣。
注意:Python3和Python2版本str函數處理浮點數時是不一樣的,Python3版本下,str和repr會返回相同的結果,Python2下則不會, 具體看下面的例子:class

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'
相關文章
相關標籤/搜索