第七天-數據池/常量池 編碼補充

  • 2020 年 1 月 19 日
  • 筆記

小數據池/常量池(坑,別糾結) :

  小數據池 一種數據緩存機制.也被稱為駐留機制 

  用緩存的前提: 數據可以被共享。不可變數據類型

  作用/意義:把數據存在小數據池 快速創建對象 共享 節省內存 解釋字符串賦值問題等

  python中只針對:整數,字符串串,布爾值    注意共享的是不可改變的數據類型

  id()  is  ==

 1 # id() 查看一個變量表示的值的內存地址   2 a = 1000   3 b = 1000   4 c = "lijie"   5 print(id(a)) # 2602674608112  內存地址   6 print(id(b)) # 2602674608112   7 print(id(c)) #  2602703864248   8   9 # == 判斷左右兩邊的值是否一致  10 print(a == b)  # 判斷左右兩邊的值  11 print(a == c)  12  13 # is 判斷左右兩邊的內容地址是否一致  14 print(a is b)  # 判斷左右兩邊內容地址  15 print(b is c)

  緩存

  為什麼有緩存 數據保存安全 速度快 加大吞吐量 分佈式 異地部署(如 Google無盤數據中心)

  單純的創建變量。都是有緩存的

1 # 單純的創建變量。都是有緩存的  2 a = 49876  3 b = 49876  4 print(a is b)  # True  5 a = 49786*20  6 b = 49786*20  7 print(a is b) # True

  注意 在命令行中(command模式) 小數據池 int取值範圍在[-5,256]

1 # 注意 在命令行中(command模式) 小數據池 int取值範圍在[-5,256]  2 a = 2000  3 b = 2000  4 print(a is b) # 在py文件裏面是True

  但在命令行中:

  原因: 在代碼塊內的緩存機制是不一樣的 故在py文件裏面是True 在command模式中是False

數據池不必糾結,了解會用就好,官方也沒詳細解釋。

編碼 轉碼:

  python3中使用的是unicode,python2中使用的是ascii碼,但unicode 太長適合計算不適合存儲. utf-8適合存儲和傳輸.因此需要用用到編碼轉換.

  編碼:  .encode()   

  注意編碼和解碼時都需要制定編碼格式.

 1 #.encode()   2 s = "嘿en哈"   3 s0 = "JJ"   4 bs = s.encode("utf-8") # 制定utf-8格式   5 bs0 = s0.encode("utf-8")   6 # 英文編碼之後結果和源字符串一致.中文編碼之後的結果根據編碼不同.編碼結果不同.   7 print(bs0) # b'JJ' 英文編碼後和原來一致   8 print(bs)  # b'xe5x98xbfenxe5x93x88'  一個中文utf-8三位元組   9 bs0 = s0.encode("gbk")  10 bs = s.encode("gbk")  11 print(bs0) # b'JJ'  12 print(bs) # b'xbaxd9enxb9xfe'  一個中文gbk 兩位元組

  解碼:.decode()

1 j = b'xbaxd9enxb9xfe'  2 j1 = j.decode("gbk")  3 print(j1)

  編碼:存儲和傳輸時 encode()

  解碼:接收數據時 decode()

  b'xxxxx'這種格式的數據是bytes類型的數據  bytes是python中的最小數據單元

數據傳輸(包括文字/圖片/視頻)都是bytes(如直播)————流程:編碼——推流——解碼——用戶

1 # 練習 把一個utf-8編碼變成GBK編碼  2 bm = b'xe5x98xbfenxe5x93x88'  3  4 bm0 = bm.decode() # 先解碼成Unicode  5 bm1 = bm0.encode("gbk") # 再編碼成gbk  6 print(bm1)