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

不過這個例子可能還是無法很好表達到底 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)系作者
  • 序言:七十年代末忙芒,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子讳侨,更是在濱河造成了極大的恐慌呵萨,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件跨跨,死亡現(xiàn)場離奇詭異潮峦,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門跑杭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铆帽,“玉大人咆耿,你說我怎么就攤上這事德谅。” “怎么了萨螺?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵窄做,是天一觀的道長。 經(jīng)常有香客問我慰技,道長椭盏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任吻商,我火速辦了婚禮掏颊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘艾帐。我一直安慰自己乌叶,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布柒爸。 她就那樣靜靜地躺著准浴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捎稚。 梳的紋絲不亂的頭發(fā)上乐横,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音今野,去河邊找鬼葡公。 笑死,一個胖子當(dāng)著我的面吹牛条霜,可吹牛的內(nèi)容都是我干的催什。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼蛔外,長吁一口氣:“原來是場噩夢啊……” “哼蛆楞!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起夹厌,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤豹爹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后矛纹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體臂聋,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了孩等。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艾君。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖肄方,靈堂內(nèi)的尸體忽然破棺而出冰垄,到底是詐尸還是另有隱情,我是刑警寧澤权她,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布虹茶,位于F島的核電站,受9級特大地震影響隅要,放射性物質(zhì)發(fā)生泄漏蝴罪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一步清、第九天 我趴在偏房一處隱蔽的房頂上張望要门。 院中可真熱鬧,春花似錦廓啊、人聲如沸欢搜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狂巢。三九已至,卻和暖如春书聚,著一層夾襖步出監(jiān)牢的瞬間唧领,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工雌续, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留斩个,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓驯杜,卻偏偏與公主長得像受啥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鸽心,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

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