Python中str()與repr()函數(shù)的區(qū)別

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

>>> a = 10
>>> type(str(a))
<class 'str'>
>>> type(repr(a))
<class 'str'>

但是這二者之間有什么區(qū)別呢?因為提供兩個功能完全相同的內(nèi)建函數(shù)是沒有意義的。先看一個例子。

>>> print(str('123'))       
123                         
>>> print(str(123))         
123                         
>>> print(repr('123'))      
'123'                       
>>> print(repr(123))        
123                         

從例子中不難發(fā)現(xiàn),當(dāng)我們把一個字符串傳給 str() 函數(shù)再打印到終端的時候,輸出的字符不帶引號。而將一個字符串傳給 repr() 函數(shù)再打印到終端的時候,輸出的字符帶有引號。

造成這兩種輸出形式不同的原因在于:

  • print 語句結(jié)合 str() 函數(shù)實際上是調(diào)用了對象的 __str__ 方法來輸出結(jié)果。而 print 結(jié)合 repr() 實際上是調(diào)用對象的 __repr__ 方法輸出結(jié)果。下例中我們用 str 對象直接調(diào)用這兩個方法,輸出結(jié)果的形式與前一個例子保持一致。
>>> print('123'.__repr__())
'123'
>>> print('123'.__str__())
123

不過這個例子可能還是無法很好表達(dá)到底 str()repr() 各有什么意義,我們再來看一個例子。

>>> from datetime import datetime
>>> now = datetime.now()
>>> print(str(now))
2017-04-22 15:41:33.012917
>>> print(repr(now))
datetime.datetime(2017, 4, 22, 15, 41, 33, 12917)

通過 str() 的輸出結(jié)果我們能很好地知道 now 實例的內(nèi)容,但是卻丟失了 now 實例的數(shù)據(jù)類型信息。而通過 repr() 的輸出結(jié)果我們不僅能獲得 now 實例的內(nèi)容,還能知道 nowdatetime.datetime 對象的實例。

因此 str()repr() 的不同在于:

  • str() 的輸出追求可讀性,輸出格式要便于理解,適合用于輸出內(nèi)容到用戶終端。
  • repr() 的輸出追求明確性,除了對象內(nèi)容,還需要展示出對象的數(shù)據(jù)類型信息,適合開發(fā)和調(diào)試階段使用。

另外如果想要自定義類的實例能夠被 str()repr() 所調(diào)用,那么就需要在自定義類中重載 __str____repr__ 方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 原文鏈接:http://www.cnblogs.com/lhj588/archive/2012/04/23/246...
    qtruip閱讀 1,411評論 0 0
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • 要點: 函數(shù)式編程:注意不是“函數(shù)編程”,多了一個“式” 模塊:如何使用模塊 面向?qū)ο缶幊蹋好嫦驅(qū)ο蟮母拍?、屬性?..
    victorsungo閱讀 1,694評論 0 6
  • pyton review 學(xué)習(xí)指南 https://www.zhihu.com/question/29138020...
    孫小二wuk閱讀 1,180評論 0 2
  • 今日明月畫金秋,思人優(yōu),斯人玖。亂思明月靜金秋,半夜酒,報月愁。 明日青梅化陳酒,杯杯流,枚枚朽。昨日青梅醉陳酒,...
    瘋左閱讀 661評論 0 6

友情鏈接更多精彩內(nèi)容