日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

is与==的恩怨、编码的详解

發(fā)布時間:2024/3/13 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 is与==的恩怨、编码的详解 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、is和==的區(qū)別:

  1、id()函數(shù)

    通過id()可以查看到?一個變量表?的值在內(nèi)存中的地址.

#字符串 a1 = "alex" a2 = "alex" print(id(a1),id(a2)) #2250772541544 2250772541544 #int a1 = 123 a2 = 123 print(id(a1),id(a2)) #2004253536 2004253536 #bool a1 = True a2 = True print(id(a1),id(a2)) #2003759264 2003759264 #字符串、int、bool等的數(shù)據(jù)地址都是一樣的
#列表 a1
= ["張無忌","周芷若"] a2 = ["張無忌","周芷若"] print(id(a1),id(a2)) #2028760057352 2028760058056 #元組 a1 = ("扶搖","楊冪") a2 = ("扶搖","楊冪") print(id(a1),id(a2)) #1494052752008 1494052752072 #字典 a1 = {"楚喬":"趙麗穎","宇文玥":"林更新"} a2 = {"楚喬":"趙麗穎","宇文玥":"林更新"} print(id(a1),id(a2)) #1620881530672 1620881530744
#列表、元組、字典等數(shù)據(jù)地址都不一樣

#結(jié)果?致, 但是在終端中是不?致的. 所以在python中,命令行代碼和py文 件中的代碼運行的效果可能是不一樣的
#?數(shù)據(jù)池(常量池): 把我們使用過的值存儲在小數(shù)據(jù)池中.供其他的變量使用. 小數(shù)據(jù)池給數(shù)字和字符串串使用, 其他數(shù)據(jù)類型不存在.
對于數(shù)字: -5~256是會被加到小數(shù)據(jù)池中的. 每次使用都是同一個對象. 對于字符串:
1. 如果是純文字信息和下劃線. 那么這個對象會被添加到小數(shù)據(jù)池
2. 如果是帶有特殊字符的. 那么不會被添加到小數(shù)據(jù)池. 每次都是新的
3. 如果是單一字?母*n的情況. 'a'*20, 在20個單位內(nèi)是可以的. 超過20個單位就不會添加 到小數(shù)據(jù)池中
#注意(一般情況下): 在py?文件中. 如果你只是單純的定義一個字符串. 那么一般情況下都是會 被添加到小數(shù)據(jù)池中的.
我們可以這樣認(rèn)為: 在使用字符串的時候, python會幫我們把字符串 進(jìn)行緩存, 在下次使用的時候直接指向這個字符串即可. 可以節(jié)省很多內(nèi)存.

?  2、==判斷兩邊的值 ? ? #雙等表?的是判斷是否相等, 注意. 這個雙等比較的是具體的值.?不是內(nèi)存地址  

   3、is 判斷內(nèi)存的地址

    id()和is有什么關(guān)系呢. 注意. is比較的就是id()計算出來的結(jié)果. 由于id是幫我 們查看某數(shù)據(jù)(對象) 的內(nèi)存地址. 那么is比較的就是數(shù)據(jù)(對象)的內(nèi)存地址. 最終我們通過is可以查看兩個變量使?用的是否是同一個對象.

a1 = "殺阡陌" a2 = "殺阡陌" print(a1 == a2) #True print(a1 is a2) #True # 原因是有小數(shù)據(jù)池的存在 導(dǎo)致兩個變量指向的是同一個對象 a1 = [1,2,3] a2 = [1,2,3] print(a1 == a2) #True 值是一樣的 print(a1 is a2) #True 內(nèi)存地址是不一樣的

  

  編碼的回顧:

    1、ASCII:有字母的大小寫,數(shù)字,特殊字符。8bit,1byte

    2、GBK:中文,16bit,2byte,兼容ASCII

    3、unicode:萬國碼,32bit,4byte,兼容ASCII

    4、utf-8:長度可變的unicode。英文:8bit,1byte。歐洲:16bit,2byte。中文:24bit,3byte。

  python2和python3的區(qū)別

    python2:?python2中默認(rèn)使?的是ASCII碼. 所以不?持中?.? 如果需要在Python2中更改編碼. 需要在?件的開始編寫:# -*- encoding:utf-8 -*
- 或coding=utf-8

    python3:在python3的內(nèi)存中. 在程序運?階段. 使?的是unicode編碼. 因為unicode是萬國碼. 什么內(nèi)容都可以進(jìn)?顯?. 那么在數(shù)據(jù)傳輸和存儲的時候由于unicode比較浪費空間和資源. 需要把 unicode轉(zhuǎn)存成UTF-8或者GBK進(jìn)?存儲. 怎么轉(zhuǎn)換呢. 在python中可以把?字信息進(jìn)?編碼. 編碼之后的內(nèi)容就可以進(jìn)?傳輸了了. 編碼之后的數(shù)據(jù)是bytes類型的數(shù)據(jù).其實啊. 還是原來的 數(shù)據(jù)只是經(jīng)過編碼之后表現(xiàn)形式發(fā)?了改變?已.

    bytes數(shù)據(jù)類型:表現(xiàn)形式:1. 英? ? b'alex'? 英?的表現(xiàn)形式和字符串沒什么兩樣

                 2. 中?? b'\xe4\xb8\xad' 這是?個漢字的UTF-8的bytes表現(xiàn)形式

二、encode: 編碼? (?encode()編碼之后的內(nèi)容是bytes類型的數(shù)據(jù))

s = "alex" print(s.encode("utf-8")) #將字符串改為UTF-8 print(s.encode("GBK")) #將字符串改為GBK #結(jié)果:b'alex'b'alex's = "" print(s.encode("utf-8")) #將字符串改為UTF-8 print(s.encode("GBK")) #將字符串改為GBK #結(jié)果:b'\xe4\xb8\xad'b'\xd6\xd0' #記住: 英?編碼之后的結(jié)果和源字符串一致. 中?編碼之后的結(jié)果根據(jù)編碼的不同. 編碼結(jié)果 也不同. 我們能看到.
?個中?的UTF-8編碼是3個字節(jié). ?一個GBK的中?文編碼是2個字節(jié). 編碼之后的類型就是bytes類型.
在?絡(luò)傳輸和存儲的時候我們python是保存和存儲的bytes類型. 那么在對?方接收的時候. 也是接收的bytes類型的數(shù)據(jù).
我們可以使用decode()來進(jìn)?解碼操作. 把bytes類型的數(shù)據(jù)還原回我們熟悉的字符串:

三、decode:解碼:

s = "我是張無忌" print(s.encode("utf-8")) #編碼 結(jié)果:b'\xe6\x88\x91\xe6\x98\xaf\xe5\xbc\xa0\xe6\x97\xa0\xe5\xbf\x8c's1 = b'\xe6\x88\x91\xe6\x98\xaf\xe5\xbc\xa0\xe6\x97\xa0\xe5\xbf\x8c' print(s1.decode("utf-8")) #解碼 結(jié)果:我是張無忌

四、編碼和解碼的時候都需要制定編碼格式.

s = "我喜歡碧瑤" bs = s.encode("GBK") #獲取到GBK文字 #把GBK轉(zhuǎn)換成UT-8,首先把GBK轉(zhuǎn)換成unicode.也就是需要解碼 print(bs) ss = bs.decode("GBK") #解碼 print(ss) #從新編譯成utf-8 bss = s.encode("utf-8") #從新編碼 print(bss)

?

轉(zhuǎn)載于:https://www.cnblogs.com/LW-5208/articles/9283342.html

總結(jié)

以上是生活随笔為你收集整理的is与==的恩怨、编码的详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。