Python 2與Python 3版本和編碼的對(duì)比
一、版本對(duì)比
首先要說的是,Python的版本,目前主要分為兩大類:
Python 2.x的版本的,被稱為Python2:是目前用的最廣泛的,比如Python 2.7.3。
Python 3.x的版本的,被稱為Python3:是最新的版本的,比如Python 3.1。長遠(yuǎn)來看,也算是以后的趨勢(shì)。
【Python2和Python3之間的區(qū)別】
1.從Python2到Python3,很多基本的函數(shù)接口變了,甚至是,有些庫或函數(shù)被去掉了,改名了
Python2和Python3,在很多基本的,最常用的函數(shù)方面,接口都變了,最典型的就要數(shù)大家最常用的print函數(shù)了。
2.第三方庫的支持方面,目前來說,還是Python2支持的最好,Python3支持的不太夠
Python強(qiáng)大的原因之一是第三方的庫很多,功能很強(qiáng)大。
而目前很多Python的第三方的庫,很多只提供Python2的。
或者是即使提供了Python3的,但是也不一定很成熟。
二、編碼對(duì)比
在 Python 中,不論是 Python2 還是 Python3 中,總體上說,字符都只有兩大類:
- 通用的 Unicode 字符;
- (unicode 被編碼后的)某種編碼類型的字符,比如 UTF-8,GBK 等類型的字符。
Python2 中字符的類型:
- str: 已經(jīng)編碼后的字節(jié)序列
- unicode: 編碼前的文本字符
Python3 中字符的類型:
- str: 編碼過的 unicode 文本字符
- bytes: 編碼前的字節(jié)序列
我們可以認(rèn)為字符串有兩種狀態(tài),即文本狀態(tài)和字節(jié)(二進(jìn)制)狀態(tài)。Python2 和 Python3 中的兩種字符類型都分別對(duì)應(yīng)這兩種狀態(tài),然后相互之間進(jìn)行編解碼轉(zhuǎn)化。編碼就是將字符串轉(zhuǎn)換成字節(jié)碼,涉及到字符串的內(nèi)部表示;解碼就是將字節(jié)碼轉(zhuǎn)換為字符串,將比特位顯示成字符。
在 Python2 中,str 和 unicode 都有 encode 和 decode 方法。但是不建議對(duì) str 使用 encode,對(duì) unicode 使用 decode, 這是 Python2 設(shè)計(jì)上的缺陷。Python3 則進(jìn)行了優(yōu)化,str 只有一個(gè) encode 方法將字符串轉(zhuǎn)化為一個(gè)字節(jié)碼,而且 bytes 也只有一個(gè) decode 方法將字節(jié)碼轉(zhuǎn)化為一個(gè)文本字符串。
Python2 的 str 和 unicode 都是 basestring 的子類,所以兩者可以直接進(jìn)行拼接操作。而 Python3 中的 bytes 和 str 是兩個(gè)獨(dú)立的類型,兩者不能進(jìn)行拼接。
Python2 中,普通的,用引號(hào)括起來的字符,就是 str;此時(shí)字符串的編碼類型,對(duì)應(yīng)著你的 Python 文件本身保存為何種編碼有關(guān),最常見的 Windows 平臺(tái)中,默認(rèn)用的是 GBK。Python3 中,被單引號(hào)或雙引號(hào)括起來的字符串,就已經(jīng)是 Unicode 類型的 str 了。
對(duì)于 str 為何種編碼,有一些前提:
- Python 文件開始已經(jīng)聲明對(duì)應(yīng)的編碼
- Python 文件本身的確是使用該編碼保存的
- 兩者的編碼類型要一樣(比如都是 UTF-8 或者都是 GBK 等)
這樣 Python 解析器才能正確的把文本解析為對(duì)應(yīng)編碼的 str。
總體來說,在 Python3 中,字符編碼問題得到了極大的優(yōu)化,不再像 Python2 那么頭疼。在 Python3 中,文本總是 Unicode, 由 str 類型進(jìn)行表示,二進(jìn)制數(shù)據(jù)使用 bytes 進(jìn)行表示,不會(huì)將 str 與 bytes 偷偷的混在一起,使得兩者的區(qū)別更加明顯。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家學(xué)習(xí)或使用python能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Python中用append()連接后多出一列Unnamed的解決
Python中用append()連接后多出一列Unnamed的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-01-01
tensorflow保持每次訓(xùn)練結(jié)果一致的簡(jiǎn)單實(shí)現(xiàn)
今天小編就為大家分享一篇tensorflow保持每次訓(xùn)練結(jié)果一致的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-02-02
使用Python開發(fā)個(gè)京東上搶口罩的小實(shí)例(僅作技術(shù)研究學(xué)習(xí)使用)
這篇文章主要介紹了使用Python開發(fā)個(gè)京東上搶口罩的小實(shí)例(僅作技術(shù)研究學(xué)習(xí)使用),需要的朋友可以參考下2020-03-03
Numpy?數(shù)據(jù)處理?ndarray使用詳解
這篇文章主要為大家介紹了Numpy?數(shù)據(jù)處理?ndarray使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
Tensorflow簡(jiǎn)單驗(yàn)證碼識(shí)別應(yīng)用
這篇文章主要為大家詳細(xì)介紹了Tensorflow簡(jiǎn)單驗(yàn)證碼識(shí)別應(yīng)用的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
python創(chuàng)建屬于自己的單詞詞庫 便于背單詞
這篇文章主要為大家詳細(xì)介紹了python創(chuàng)建屬于自己的單詞詞庫,便于背單詞,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
Python+微信接口實(shí)現(xiàn)運(yùn)維報(bào)警
這篇文章主要介紹了Python+微信接口實(shí)現(xiàn)運(yùn)維報(bào)警的相關(guān)資料,需要的朋友可以參考下2016-08-08

