在 python 中要將某一型別的變數或者常量轉換為字串物件通常有兩種方法,即 str() 或者 repr() 。
區別與使用
函式str() 用於將值轉化為適於人閱讀的形式,而repr() 轉化為供直譯器讀取的形式(如果沒有等價的語法,則會發生syntaxerror 異常), 適合開發和除錯階段使用。
>>> number = 123456789>>> type(str(number))
>>> type(repr(number))
>>> 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'
PYTHON中 str 函式和 repr
自學python中,學習中總結的經驗部落格,如有錯誤,還請諒解 python中定義乙個類時,常用 str 以及 repr 函式輸出這個類的具體描述,但這兩個函式具體又有些什麼區別呢?一句話總結的話 repr 比 str 的使用要求更加嚴格,優先順序更低。優先順序比較 class my func ob...
Python內建函式str 和repr
內建函式str 和repr representation,表達,表示 或反引號操作符 可以方便地以字串的方式獲取物件的內容 型別 數值屬性等資訊。str 函式得到的字串可讀性好 故被print呼叫 repr 函式得到的字串通常可以用來重新獲得該物件,通常情況下 obj eval repr obj 這...
python之repr 和str 的區別
repr repr object 返回乙個可以用來表示物件的可列印字串 首先,嘗試生成這樣乙個字串,將其傳給 eval 可重新生成同樣的物件 否則,生成用尖括號包住的字串,包含型別名和額外的資訊 比如位址 乙個類 class 可以通過 repr 成員來控制repr 函式作用在其實例上時的行為。str...