一,python2與python3的區別
1)python2可以不用括號()
python3必須加括號
2)python2中有range()有序列表,xrange()生成器
python3中只有range()
3)python2中輸入是raw_input()
python3中輸入是input()
二, = == is 三者的區別
1) = 是賦值
== 是比較,值是否相等
is 比較的是內存地址
id(內容) 打印的是內容的id print(id1(內容),id2(內容))
is 與 == 區別:
is 用於判斷兩個變量引用對象是否為同一個, == 用於判斷引用變量的值是否相等。
三,小數據池
小數據池是int和str在一定范圍內共用一個數據池,范圍-1— -256。小數據池是為了節省內存。
1)str:不含有特殊字符的共用
ps: s1 = ‘xiaoming’
s2 = 'xiaoming'
print(s1 is s2)
結果是True
2)str: ‘一個字符’*小於等於20的數字,還是共用,如果是大於20的就不共用了。
多個字符不論乘什么數字,都不共用
3)剩下的list dict taple set等都沒有小數據池概念
四,編碼
ascii碼: 只有英文字母和特殊字符,一個字節是8位
unicode碼: 一個字符是32位,一個字母4個字節
一個漢字是32位,一個漢字4個字節
utf-8: 一個字母是8位,一個字母1個字節
一個漢字是24位,一個漢字3個字節
gbk; 一個字母是8位,一個字母1個字節
一個漢字是16位,一個漢字2個字節
1)各個編碼之間的二進制不能互相識別,會亂碼。
uncode占得內存太多,所以不能傳輸和儲存。
utf-8,gbk,utf-16,utf-32,gb2312,ascii等都可以儲存和傳輸。
2)python3在內存中是用unicode編碼方式存儲的,所以不能直接儲存和傳輸,要轉化為其他編碼進行儲存和傳輸。
五,bytes類型
bytes類型也是一種數據類型。
bytes不是用unicode方式編碼的,所以可以儲存和傳輸。
bytes的編碼方式是utf-8,gbk,ascii,gb2312等。
1)英文
在python3中:str表現形式; s = ''xiaoming'' str編碼形式:unicode
在bytes中: str表現形式: s = b''xiaoming'' str編碼形式:utf-8,gbk,ascii,gb2312等
中文
在python3中:str表現形式; s = ''中國'' str編碼形式:unicode
在bytes中: str表現形式: s = b''x\e91\e91e91\e91e91\e91 str編碼形式:utf-8,gbk,ascii,gb2312等
六,編碼 encode
1)將str>>>bytes 可以指定編碼方式
s1 = ‘xiaoming’
s11 = s1.encode('utf-8')
print(s11)
表面是將str轉化為bytes,實際內部是將unicode轉化為utf-8,gbk,ascii,gb2312等