最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

簡(jiǎn)單了解Python3 bytes和str類型的區(qū)別和聯(lián)系

 更新時(shí)間:2019年12月19日 11:35:05   作者:Python探索牛  
這篇文章主要介紹了簡(jiǎn)單了解Python3 bytes和str類型的區(qū)別和聯(lián)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了簡(jiǎn)單了解Python3 bytes和str類型的區(qū)別和聯(lián)系,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

Python 3最重要的新特性之一是對(duì)字符串和二進(jìn)制數(shù)據(jù)流做了明確的區(qū)分。文本總是Unicode,由str類型表示,二進(jìn)制數(shù)據(jù)則由bytes類型表示。Python 3不會(huì)以任意隱式的方式混用str和bytes,你不能拼接字符串和字節(jié)流,也無(wú)法在字節(jié)流里搜索字符串(反之亦然),也不能將字符串傳入?yún)?shù)為字節(jié)流的函數(shù)(反之亦然)。

下面讓我們深入分析一下二者的區(qū)別和聯(lián)系。

編碼發(fā)展的歷史

在談bytes和str之前,需要先說(shuō)說(shuō)關(guān)于編碼是如何發(fā)展的。。

在計(jì)算機(jī)歷史的早期,美國(guó)為代表的英語(yǔ)系國(guó)家主導(dǎo)了整個(gè)計(jì)算機(jī)行業(yè),26個(gè)英文字母組成了多樣的英語(yǔ)單詞、語(yǔ)句、文章。因此,最早的字符編碼規(guī)范是ASCII碼,一種8位即1個(gè)字節(jié)的編碼規(guī)范,它可以涵蓋整個(gè)英語(yǔ)系的編碼需要。

編碼是什么?編碼就是把一個(gè)字符用一個(gè)二進(jìn)制來(lái)表示。我們都知道,所有的東西,不管是英文、中文還是符號(hào)等等,最終存儲(chǔ)在磁盤上都是01010101這類東西。在計(jì)算機(jī)內(nèi)部,讀取和存儲(chǔ)數(shù)據(jù)歸根結(jié)底,處理的都是0和1組成的比特流。問(wèn)題來(lái)了,人類看不懂這些比特流,如何讓這些010101對(duì)人類變得可讀呢?于是出現(xiàn)了字符編碼,它是個(gè)翻譯機(jī),在計(jì)算機(jī)內(nèi)部某個(gè)地方,透明的幫我們將比特流翻譯成人類可以直接理解的文字。對(duì)于一般用戶,不需要知道這個(gè)過(guò)程是什么原理,是怎么執(zhí)行的。但是對(duì)于程序員卻是個(gè)必須搞清楚的問(wèn)題。

以ASCII編碼為例,它規(guī)定1個(gè)字節(jié)8個(gè)比特位代表1個(gè)字符的編碼,也就是“00000000”這么寬,一個(gè)一個(gè)字節(jié)的解讀。例如:01000001表示大寫(xiě)字母A,有時(shí)我們會(huì)“偷懶"的用65這個(gè)十進(jìn)制來(lái)表示A在ASCII中的編碼。8個(gè)比特位,可以沒(méi)有重復(fù)的最多表示2的8次方(255)個(gè)字符。

后來(lái),計(jì)算機(jī)得到普及,中文、日文、韓文等等國(guó)家的文字需要在計(jì)算機(jī)內(nèi)表示,ASCII的255位遠(yuǎn)遠(yuǎn)不夠,于是標(biāo)準(zhǔn)組織制定出了叫做UNICODE的萬(wàn)國(guó)碼,它規(guī)定任何一個(gè)字符(不管哪國(guó)的)至少以2個(gè)字節(jié)表示,可以更多。其中,英文字母就是用2個(gè)字節(jié),而漢字是3個(gè)字節(jié)。這個(gè)編碼雖然很好,滿足了所有人的要求,但是它不兼容ASCII,同時(shí)還占用較多的空間和內(nèi)存。因?yàn)?,在?jì)算機(jī)世界更多的字符是英文字母,明明可以1個(gè)字節(jié)就能夠表示,非要用2個(gè)。

于是UTF-8編碼應(yīng)運(yùn)而生,它規(guī)定英文字母系列用1個(gè)字節(jié)表示,漢字用3個(gè)字節(jié)表示等等。因此,它兼容ASCII,可以解碼早期的文檔。UTF-8很快就得到了廣泛的應(yīng)用。

在編碼的發(fā)展歷程中,我國(guó)還創(chuàng)造了自己的編碼方式,例如GBK,GB2312,BIG5。他們只局限于在國(guó)內(nèi)使用,不被國(guó)外認(rèn)可。在GBK編碼中,中文漢字占2個(gè)字節(jié)。

bytes和str之間的異同
回到bytes和str的身上。bytes是一種比特流,它的存在形式是01010001110這種。我們無(wú)論是在寫(xiě)代碼,還是閱讀文章的過(guò)程中,肯定不會(huì)有人直接閱讀這種比特流,它必須有一個(gè)編碼方式,使得它變成有意義的比特流,而不是一堆晦澀難懂的01組合。因?yàn)榫幋a方式的不同,對(duì)這個(gè)比特流的解讀也會(huì)不同,對(duì)實(shí)際使用造成了很大的困擾。下面讓我們看看Python是如何處理這一系列編碼問(wèn)題的:

>>> s = "中文"
>>> s
'中文'
>>> type(s)
<class 'str'>
>>> b = bytes(s, encoding='utf-8')
>>> b
b'\xe4\xb8\xad\xe6\x96\x87'
>>> type(b)
<class 'bytes'>
從例子可以看出,s是個(gè)字符串類型。Python有個(gè)內(nèi)置函數(shù)bytes()可以將字符串str類型轉(zhuǎn)換成bytes類型,b實(shí)際上是一串01的組合,但為了在ide環(huán)境中讓我們相對(duì)直觀的觀察,它被表現(xiàn)成了b'\xe4\xb8\xad\xe6\x96\x87'這種形式,開(kāi)頭的b表示這是一個(gè)bytes類型。\xe4是十六進(jìn)制的表示方式,它占用1個(gè)字節(jié)的長(zhǎng)度,因此”中文“被編碼成utf-8后,我們可以數(shù)得出一共用了6個(gè)字節(jié),每個(gè)漢字占用3個(gè),這印證了上面的論述。在使用內(nèi)置函數(shù)bytes()的時(shí)候,必須明確encoding的參數(shù),不可省略。

我們都知道,字符串類str里有一個(gè)encode()方法,它是從字符串向比特流的編碼過(guò)程。而bytes類型恰好有個(gè)decode()方法,它是從比特流向字符串解碼的過(guò)程。除此之外,我們查看Python源碼會(huì)發(fā)現(xiàn)bytes和str擁有幾乎一模一樣的方法列表,最大的區(qū)別就是encode和decode。

從實(shí)質(zhì)上來(lái)說(shuō),字符串在磁盤上的保存形式也是01的組合,也需要編碼解碼。

如果,上面的闡述還不能讓你搞清楚兩者的區(qū)別,那么記住下面兩幾句話:

在將字符串存入磁盤和從磁盤讀取字符串的過(guò)程中,Python自動(dòng)地幫你完成了編碼和解碼的工作,你不需要關(guān)心它的過(guò)程。

使用bytes類型,實(shí)質(zhì)上是告訴Python,不需要它幫你自動(dòng)地完成編碼和解碼的工作,而是用戶自己手動(dòng)進(jìn)行,并指定編碼格式。

Python已經(jīng)嚴(yán)格區(qū)分了bytes和str兩種數(shù)據(jù)類型,你不能在需要bytes類型參數(shù)的時(shí)候使用str參數(shù),反之亦然。這點(diǎn)在讀寫(xiě)磁盤文件時(shí)容易碰到。

在bytes和str的互相轉(zhuǎn)換過(guò)程中,實(shí)際就是編碼解碼的過(guò)程,必須顯式地指定編碼格式。

>>> b
b'\xe4\xb8\xad\xe6\x96\x87'
>>> type(b)
<class 'bytes'>
>>> s1 = str(b)
>>> s1
"b'\\xe4\\xb8\\xad\\xe6\\x96\\x87'"
>>> type(s1)
<class 'str'>
>>> s1 = str(b, encoding='utf-8')
>>> s1
'中文'
>>> type(s1)
<class 'str'>

我們?cè)侔炎址畇1,轉(zhuǎn)換成gbk編碼的bytes類型:

>>> s1
'中文'
>>> type(s1)
<class 'str'>
>>> b = bytes(s1, encoding='gbk')
>>> b
b'\xd6\xd0\xce\xc4'

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python將十六進(jìn)制值轉(zhuǎn)換為字符串的三種方法

    python將十六進(jìn)制值轉(zhuǎn)換為字符串的三種方法

    這篇文章主要給大家介紹了關(guān)于python將十六進(jìn)制值轉(zhuǎn)換為字符串的三種方法,工作內(nèi)容的需要需求,經(jīng)常需要使用到字符同16進(jìn)制,以及各個(gè)進(jìn)制之間的轉(zhuǎn)換,需要的朋友可以參考下
    2023-07-07
  • Python淺析生成器generator的使用

    Python淺析生成器generator的使用

    生成器generator在循環(huán)過(guò)程中,按照某種算法推算數(shù)據(jù),不必創(chuàng)建容器存儲(chǔ)完整的結(jié)果,從而節(jié)省內(nèi)存空間。數(shù)據(jù)量越大,優(yōu)勢(shì)越明顯。以上作用也稱之為延遲操作或惰性操作,通俗的講就是在需要的時(shí)候才計(jì)算結(jié)果,而不是一次構(gòu)建出所有結(jié)果
    2022-07-07
  • Python使用Asyncio實(shí)現(xiàn)檢查網(wǎng)站狀態(tài)

    Python使用Asyncio實(shí)現(xiàn)檢查網(wǎng)站狀態(tài)

    這篇文章主要為大家詳細(xì)介紹了Python如何使用Asyncio實(shí)現(xiàn)檢查網(wǎng)站狀態(tài),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-03-03
  • python SocketServer源碼深入解讀

    python SocketServer源碼深入解讀

    這篇文章主要介紹了python SocketServer源碼深入解讀,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python線程創(chuàng)建和終止實(shí)例代碼

    Python線程創(chuàng)建和終止實(shí)例代碼

    這篇文章主要介紹了Python線程創(chuàng)建和終止實(shí)例代碼,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • 在pandas多重索引multiIndex中選定指定索引的行方法

    在pandas多重索引multiIndex中選定指定索引的行方法

    今天小編就為大家分享一篇在pandas多重索引multiIndex中選定指定索引的行方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-11-11
  • python腳本實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出excel格式的簡(jiǎn)單方法(推薦)

    python腳本實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出excel格式的簡(jiǎn)單方法(推薦)

    下面小編就為大家?guī)?lái)一篇python腳本實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出Excel格式的簡(jiǎn)單方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • python實(shí)現(xiàn)圖片批量壓縮程序

    python實(shí)現(xiàn)圖片批量壓縮程序

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)圖片批量壓縮程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Python實(shí)現(xiàn)孤立隨機(jī)森林算法的示例代碼

    Python實(shí)現(xiàn)孤立隨機(jī)森林算法的示例代碼

    孤立森林(isolation?Forest)是一種高效的異常檢測(cè)算法,它和隨機(jī)森林類似,但每次選擇劃分屬性和劃分點(diǎn)(值)時(shí)都是隨機(jī)的,而不是根據(jù)信息增益或基尼指數(shù)來(lái)選擇。本文將用Python實(shí)現(xiàn)這一算法,需要的可以參考一下
    2022-03-03
  • Python logging模塊寫(xiě)入中文出現(xiàn)亂碼

    Python logging模塊寫(xiě)入中文出現(xiàn)亂碼

    這篇文章主要介紹了Python logging模塊寫(xiě)入中文出現(xiàn)亂碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05

最新評(píng)論

小金县| 平和县| 贞丰县| 金门县| 上林县| 崇义县| 涟水县| 集安市| 健康| 门源| 镇赉县| 昌吉市| 平谷区| 贵南县| 达州市| 萨嘎县| 阿拉尔市| 孝昌县| 正蓝旗| 成都市| 堆龙德庆县| 磴口县| 紫云| 洛阳市| 建昌县| 玛多县| 商水县| 灵石县| 西林县| 丰镇市| 桂东县| 峡江县| 昌邑市| 锡林郭勒盟| 华阴市| 大安市| 武鸣县| 和顺县| 隆昌县| 石楼县| 四平市|