一、python2和python3的區別
python2 | python3 |
---|---|
print('abc') 、print 'abc' | print('abc') |
range() 、xrange() | range() |
raw_input() | input() |
二、‘=’、‘==’、‘is’
1、‘=’:賦值,賦值是給的變量在內存中的地址
li1 = [1,2,3]
li2 = li1
print(id(li1),id(li2)) #id(li1)的值和id(li2)的值相等
2、‘==’:比較值是否相等
3、‘is’:比較內存地址是否相等
三、小數據池
代碼塊 : 作爲一個單元執行的python代碼
在python解釋器終端中,以一行代碼爲一個代碼塊
在pycharm中以一個python文件爲一個代碼塊,但是對於一個文件中的兩個函數,分別是兩個不同的代碼塊
小數據池:數字,字符串,bool
數字的範圍:-5 —256
字符串:
1、字符串的長度是0或者1,默認駐留
i1 = '$'
i2 = '$'
print(i1 is i2) #True
2、字符串的長度大於1時,且只含大小寫字母、數字和下劃線時,默認駐留
s1 = 'abcABC___123'
s2 = 'abcABC___123'
print(s1 is s2) #True
s1 = 'abc'
s2 = 'abc'
print(s1 is s2) #True
s1 = '1234abc__'
s2 = '1234abc__'
print(s1 is s2) #True
s1 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
s2 = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
print(s1 is s2) #True
3、乘法得到的字符串
乘數爲1
(1)字符串的長度是0或者1,默認駐留
(2)字符串的長度大於1時,且只含大小寫字母、數字和下劃線時,默認駐留
s1 = ''*1
s2 = ''*1
print(s1 is s2) #True
s1 = '$'*1
s2 = '$'*1
print(i1 is i2) #True
s1 = 'abcdefghijklmn___123___'*1
s2 = 'abcdefghijklmn___123___'*1
print(i1 is i2) #True
乘數大於1,且只包含數字,字母,下劃線纔會被緩存,且長度不超過20(包含20),默認駐留
s1 = 'abcde'*4
s2 = 'abcde'*4
print(s1 is s2) #True
s1 = '1a_a'*4
s2 = '1a_a'*4
print(s1 is s2) #True
s1 = '1a_ad_'*4
s2 = '1a_ad_'*4
print(s1 is s2) #False
4、指定駐留
from sys import intern
a = intern('abc!@#$'*20)
b = intern('abc!@#$'*20)
print(a is b) #True
總結:
如果在同一代碼塊下,則採用同一代碼塊下的緩存機制。
如果是不同代碼塊,則採用小數據池的駐留機制
四、編碼
ascii | unicode | utf-8 | gbk |
---|---|---|---|
A : 00000010 8位 一個字節 |
A : 00000000 00000001 00000010 00000100 32位 四個字節 |
00100000 8位 一個字節 |
00000110 8位 一個字節 |
中 : 00000000 00000001 00000010 00000110 32位 四個字節 |
00000001 00000010 00000110 24位 三個字節 |
00000010 00000110 16位 兩個字節 |
ascii:
A : 00000010 8位 一個字節
unicode:
A : 00000000 00000001 00000010 00000100 32位 四個字節
中 : 00000000 00000001 00000010 00000110 32位 四個字節
utf-8:
A : 00100000 8位 一個字節
中 : 00000001 00000010 00000110 24位 三個字節
gbk:
A : 00000110 8位 一個字節
中 : 00000010 00000110 16位 兩個字節
1、各個編碼之間的二進制,是不能互相識別的,會產生亂碼。
2、文件的儲存,傳輸,不能是unicode(只能是utf-8,utf-16,gbk,gb2312,ascii等)
python3:
str在內存中是用unicode編碼。
bytes類型
對於英文:
str :表現形式:s = 'alex'
編碼方式: 010101010 unicode
bytes :表現形式:s = b'alex'
編碼方式: 000101010 utf-8、gbk
對於中文:
str :表現形式:s = '中國'
編碼方式: 010101010 unicode
bytes :表現形式:s = b'x\e91\e91\e01\e21\e31\e32'
編碼方式: 000101010 utf-8、gbk
#編碼 str --> bytes
s1 = 'alex'
s11 = s1.encode('utf-8')
s12 = s1.encode('gbk')
print(s11)
print(s12)
s2 = '中國'
s21 = s2.encode('utf-8')
s22 = s2.encode('gbk')
print(s21)
print(s22)