python使用str & repr轉(zhuǎn)換字符串
可能比較 low 還是記錄一下:
str 和 repr的使用過程
- str 是一個(gè)類型 (int, long 類似), 同樣她也可以作為一個(gè)工廠方法 實(shí)例一個(gè) string
- repr 是python 內(nèi)置的函數(shù), 用于保留一個(gè) 打印值在python 代碼片段里的真實(shí)狀態(tài)
好,以上全是廢話
>>> a = 1 >>> a + "" --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-5-ebf3ab7f3a34> in <module>() ----> 1 a + "" TypeError: unsupported operand type(s) for +: 'int' and 'str' >>> a = 1 >>> repr(a) + ""
可以看到, 我們可以通過使用 str 和 repr 來轉(zhuǎn)換字符串
但是,str 只能提供一個(gè) 元string來做轉(zhuǎn)換, 不可以是一個(gè)變量(她不具備執(zhí)行變量的能力)
repr 是一個(gè)函數(shù), 所以實(shí)際上是傳參, 可以是變量和string
好多人都知道str()能把123數(shù)字轉(zhuǎn)成字符串,python里的str()甚至還能把列表、字典等對(duì)象轉(zhuǎn)成字符串。這都好理解,可是一旦把str()和repr()放在一起,大家就全都不淡定了-_-!
來看一段代碼,仍是在IDLE里交互:
>>> str('hello')
'hello'
>>> repr('hello')
"'hello'"
>>> str('你好')
'\xc4\xe3\xba\xc3'
>>> repr('你好')
"'\\xc4\\xe3\\xba\\xc3'"
先看前兩句:英文的'hello'在str()后仍是'hello',可是在repr()后就變成了"'hello'"。這就說明,str()返回的就是字符串本身,而repr()雖然返回的也是字符串,但它是一個(gè)標(biāo)準(zhǔn)字符串,官方解釋比較繞,我來解釋下吧。repr是representation及描述的意思,不是對(duì)人的描述,而是對(duì)python機(jī)器的描述,也就是它會(huì)將某物返回一個(gè)它在python中的描述。說人話:repr(obj)告訴我們obj這個(gè)變量在背地里是什么樣子,在背地里是怎么被python處理被python"玩弄"的。
在python里,我們總會(huì)被眼睛欺騙。編輯器里顯示的東西,并不總是它原本的面貌。python為了方便,總是表面上一套,背地里又一套。
再來理解后兩句:中文的'你好'在str()后變成了編碼'\xc4\xe3\xba\xc3',在repr()后變成了"'\xc4\xe3\xba\xc3'"。`都加上了轉(zhuǎn)移符變成\,相當(dāng)于把字符串中的內(nèi)容都“標(biāo)準(zhǔn)化”了。至于'變成"`只是為了說明repr()返回的是一個(gè)經(jīng)過處理的新字符串。
print后的str()和repr()
來看代碼:
>>> print str('你好')
你好
>>> print repr('你好')
'\xc4\xe3\xba\xc3'
之前str('你好')顯示的是'\xc4\xe3\xba\xc3',而一經(jīng)過print,就變成了正確的'你好'。上面說過了,命令行里直接輸入一個(gè)變量,顯示的是它在python后臺(tái)存儲(chǔ)的數(shù)據(jù);而用print出來的東西,會(huì)顯出出盡量友好、讓人能看懂的東西。
理解了這個(gè),對(duì)print這兩個(gè)結(jié)果的不同,也就全然理解了。然后也就放棄print作為考據(jù)的心了。
相關(guān)文章
python 實(shí)現(xiàn)網(wǎng)上商城,轉(zhuǎn)賬,存取款等功能的信用卡系統(tǒng)
本篇文章主要介紹 基于python 實(shí)現(xiàn)信用卡系統(tǒng),附有代碼實(shí)例,對(duì)于用python 開發(fā)網(wǎng)絡(luò)上傳系統(tǒng)具有參考價(jià)值,有需要的朋友可以看下2016-07-07
Python中subprocess模塊用法實(shí)例詳解
這篇文章主要介紹了Python中subprocess模塊用法,實(shí)例分析了subprocess模塊的相關(guān)使用技巧,需要的朋友可以參考下2015-05-05
Python?eval()函數(shù)和ast.literal_eval()的區(qū)別你知道嗎
這篇文章主要為大家詳細(xì)介紹了Python?eval()函數(shù)和ast.literal_eval()的區(qū),文中圖片代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-02-02
使用Python通過oBIX協(xié)議訪問Niagara數(shù)據(jù)的示例
這篇文章主要介紹了使用Python通過oBIX協(xié)議訪問Niagara數(shù)據(jù)的示例,幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-12-12
Python使用多進(jìn)程運(yùn)行含有任意個(gè)參數(shù)的函數(shù)
這篇文章主要介紹了Python使用多進(jìn)程運(yùn)行含有任意個(gè)參數(shù)的函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-05-05
Python實(shí)現(xiàn)的各種常見分布算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的各種常見分布算法,結(jié)合實(shí)例形式總結(jié)分析了Python常見的各種分布算法相關(guān)實(shí)現(xiàn)技巧,包括二項(xiàng)分布、離散分布、泊松分布、正態(tài)分布、指數(shù)分布等算法實(shí)現(xiàn)方法,需要的朋友可以參考下2018-12-12
如何使用Django默認(rèn)的Auth權(quán)限管理系統(tǒng)
本文主要介紹了如何使用Django默認(rèn)的Auth權(quán)限管理系統(tǒng),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

