python里str什么意思_Python 3 字符串中的 STR 和 Bytes 究竟有什么区别?
原標題:Python 3 字符串中的 STR 和 Bytes 究竟有什么區(qū)別?
Python2的字符串有兩種:str和Unicode,Python3的字符串也有兩種:str和Bytes。Python2的str相當于Python3的Bytes,而Unicode相當于Python3的Bytes。
Python2里面的str和Unicode是可以混用的,在都是英文字母的時候str和unicode沒有區(qū)別。
而Python3嚴格區(qū)分文本(str)和二進制數(shù)據(jù)(Bytes),文本總是Unicode,用str類型,二進制數(shù)據(jù)則用Bytes類型表示,這樣嚴格的限制也讓我們對如何使用它們有了清晰的認識,這是很棒的。
Python2 和 Python3 的區(qū)別
通過以下代碼我們認識以下Python2和Python3的字符串混用情況:
以上代碼可以看到,Python2中str和Unicode在都是ASCII碼時混用沒區(qū)別,因為Unicode的ASCII區(qū)域的值跟str的ASCII是一樣的;而對應非ASCII區(qū)域(比如中文),二者又不一樣了。
可以看到Python2拋出了Unicode Decode Error的異常,相信這也是很多人處理文本時遇到過的錯誤;‘編程’在str類型時長度是6,而在Unicode時是2。不同字符的不同表現(xiàn),讓Python2的str和Unicode顯得撲朔迷離。
在Python3中,嚴格區(qū)分了str和Bytes,不同類型之間操作就會拋出Type Error的異常。
上面用示例闡述了Python2和Python3中字符串的不同,下面主要講Python3中的字符串。
str和bytes之間的轉換
一圖勝千言:
str和bytes的相互轉換
str.encode(‘encoding’) -> bytes
bytes.decode(‘encoding’) -> str
Encoding指的是具體的編碼規(guī)則的名稱,對于中文來說,它可以是這些值: ‘utf-8’, ‘gb2312’, ‘gbk’, ‘big5’ 等等。
不知道你有沒有注意到上圖中str矩形要比Bytes矩形短,表示同樣的內容,str的長度要小于或等于Bytes的長度,你可以考慮一下原因(參考Unicode、UTF-8的編碼規(guī)則)。
下面看看具體代碼理解一下str和Bytes的相互轉換:
上面str和Bytes之間的轉換是針對文本內容的,要是其它二進制內容(比如,圖片)時,Bytes就不能decode成str了,看以下代碼的異常:
因為圖片中的二進制數(shù)據(jù)不符合文本數(shù)據(jù)的UTF-8編碼規(guī)則。
上面獲得圖片數(shù)據(jù)時,我們用到了open()來讀取文件,文件存儲的無非是文本和二進制這兩種格式,讀寫文件時也有分清楚編碼:
讀寫二進制數(shù)據(jù)(如圖片)時,要加’rb’參數(shù),b代碼Binary(二進制)。讀寫文本數(shù)據(jù)時,一般加’b’,open()會自動轉換Bytes到str。
總結一下
Python3里面的str是在內存中對文本數(shù)據(jù)進行使用的,Bytes是對二進制數(shù)據(jù)使用的。
str可以encode為Bytes,但是Bytes不一定可以decode為str。實際上Bytes.decode(‘latin1’)可以稱為str,也就是說decode使用的編碼決定了decode()的成敗,同樣的,UTF-8編碼的Bytes字符串用GBK去decode()也會出錯。
Bytes一般來自網(wǎng)絡讀取的數(shù)據(jù)、從二進制文件(圖片等)讀取的數(shù)據(jù)、以二進制模式讀取的文本文件(.txt, .html, .py, .cpp等)。返回搜狐,查看更多
責任編輯:
總結
以上是生活随笔為你收集整理的python里str什么意思_Python 3 字符串中的 STR 和 Bytes 究竟有什么区别?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 会理天气预报软件测试,会理天气预报15天
- 下一篇: matlab打开笔记本摄像头_基于MAT