day6-小知識點彙總及編碼進階

一、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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章