1. 程式人生 > >第七天-數據池/常量池 編碼補充

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

需要 對象 python false comm 數據池 byte 意義 接收數據

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

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

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

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

  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‘\xe5\x98\xbfen\xe5\x93\x88‘  一個中文utf-8三字節
 9 bs0 = s0.encode("gbk")
10 bs = s.encode("gbk")
11 print(bs0) # b‘JJ‘
12 print(bs) # b‘\xba\xd9en\xb9\xfe‘  一個中文gbk 兩字節

  解碼:.decode()

1 j = b\xba\xd9en\xb9\xfe
2 j1 = j.decode("gbk")
3 print(j1)

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

  解碼:接收數據時 decode()

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

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

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

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