day06

1、小知識點匯總

《day06》
《day06》

1 # 賦值后的地址是一樣的
2 li1 = [1,2,3]
3 li2 = li1
4 print(li1 is li2)# is 用於判斷li1的地址是否和li2的地址一樣,結果輸出為True
5 print(id(li1))# id()用於輸出地址
6 print(id(li2))
7 # 2440684855944
8 # 2440684855944

地址的比較

  在python3中,有小數據池的概念,凡是数字在-5到256之間,他們都共用一個地址,目的是為了節省空間,由於PyCharm的機制原因,不能體現出這種變化,所以我在cmd中實現。

《day06》

2、編碼講解

  以下是各個編碼對A和中的表示。注意以下二進制的表示都是隨意設置,並無根據,只是為了方便做筆記。

  ASCLL碼 

    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位  兩個字節

  在python2和python3中:

    1,各個編碼之間的二進制,是不能互相識別的,會產生亂碼。
    2,文件的儲存,傳輸,不能是unicode(只能是utf-8、utf-16、gbk、gb2312、ASCLL等)

  在python3中:

    str 在內存中是用unicode編碼。Python 3最重要的新特性之一是對字符串和二進制數據流做了明確的區分。文本總是Unicode,由str類型表示,二進制數據則由bytes類型表示。

《day06》

  數據的存儲和傳輸,只能由bytes類型進行。

  對於英文:
  str :表現形式:s = ‘alex’
  編碼方式: 010101010  unicode
  bytes :表現形式:s = b’alex’
  編碼方式: 000101010  utf-8、gbk。。。。

1 s = 'alex'
2 s1 = b'alex'
3 print(s,type(s))
4 print(s1,type(s1))
5 # result:
6 # alex <class 'str'>
7 # b'alex' <class 'bytes'>

  對於中文:

  str :表現形式:s = ‘中國’

  編碼方式: 010101010  unicode

  bytes :表現形式:s = b’\xe4\xb8\xad\xe5\x9b\xbd’    

1 s = '中國'
2 print(s,type(s))
3 b = bytes(s,encoding='utf-8')
4 print(b)

  可以看出這裡是用utf-8編碼,utf-8是三個字節,中國兩個字就有六個字節,故表現形式裏面就有了六個。

1 s = '中國'
2 print(s,type(s))
3 b = bytes(s,encoding='gbk')
4 print(b)

  在這裏用的是gbk編碼,故他的結果是四個:b’\xd6\xd0\xb9\xfa’

  編碼方式: 000101010  utf-8 gbk。。。。

 

  下面是一些編碼和解碼的操作:

 1 #str --->byte  encode 編碼
 2 s = '你好'
 3 b = s.encode('utf-8')
 4 print(b)
 5 #byte --->str decode 解碼
 6 s1 = b.decode('utf-8')
 7 print(s1)
 8 
 9 s = 'abf'
10 b = s.encode('utf-8')
11 print(b)
12 #byte --->str decode 解碼
13 s1 = b.decode('gbk')
14 print(s1)

 

  

点赞

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *