1. 程式人生 > >小學生都能學會的python(小數據池)

小學生都能學會的python(小數據池)

32bit class 當我 文字 asc import 是不是 內容 內存地址

小學生都能學會的python(小數據池)

1. 小數據池.
目的:緩存我們字符串,整數,布爾值。在使用的時候不需要創建過多的對象
緩存:int, str, bool、
int: 緩存範圍 -5~256
str:
1. 長度小於等於1,直接緩存
2. 長度大於1. 字符串中如果只有數字, 字母, 下劃線。 就會緩存
3. 乘以1。 同上, 乘以大於1的數。僅包含數字,字母下劃線。最終長度小於20會緩存
4. 使用sys模塊中的intern()緩存字符串


代碼塊的關系:如果在同一個代碼塊中。默認的整數和字符串還有布爾值都會進行緩存. 如果涉及計算。尊崇上面的規則
如果跨代碼塊,按照上面的規則執行的

# a = [1,2,2,13,123,123,12,3,12,3,12,312,3,12,32,13,12,3,21]
# b = a # 明天深淺拷貝

# 內存地址 id()
# print(id(a))
# print(id(b))

# a = 1000
# print(id(a))  # 內存的開辟是由解釋器來完成的.


# 雙胞胎
# == 比較的是值(內容)  True
# is 比較的是內存地址(是不是同一個對象) False

# lst1 = [1,2,3]
# lst2 = [1,2,3]
# print(lst1 == lst2) # 長得一樣
# print(lst1 is lst2) # 不是同一個對象


# a = "alex"
# b = "alex"
# print(a == b)
# print(a is b)  在python中, 默認會把數字, 字符串, 布爾值進行緩存

# 1.當我們在控制臺的時候, 代碼塊與代碼塊之間的規則:
#     1. 數字:  -5 ~ 256之間的整數會被緩存
#     2. 字符串:
#         長度小於等於1 會默認緩存
#         長度大於1 如果字符串中只有數字, 字母下換線緩存
#         乘法得到的字符串:
#             1. 如果乘數是1. 和上面兩個方案一致
#             2. 乘數不是1. 最終長度不能超過20
#         手動指定緩存  from sys import intern intern()制定緩存的內容
#      3. 布爾值
# 2. py文件裏. 一個代碼塊內部. 只會緩存int, str, bool 也有自己的小數據池。 緩存的範圍會比外面的代碼塊的數據池要大
#       1. 數字。都會緩存。 運算的結果不緩存(-5~256 會緩存)
#       2. 字符串。 默認的字符串都緩存. 如果有乘法。 遵循上方的結論
#       3. 布爾值。 默認緩存


a = "[email protected]" # 5
b = "[email protected]" # 1

  


2. is和==的區別
is比較的是內存地址
==比較的是值
3. decode和encode
python3內存中使用的是unicode。
unicode => utf-8 encode("utf-8")
utf-8 => unicode decode("utf-8")
utf-8和gbk不能直接轉換
bytes是字符串的另一種表示形式

再談編碼

‘‘‘
1. ASCII: 8bit 1byte 英文字母 數字 特殊字符.
2. GBK: 16bit 2byte 主要是存中文。日文, 韓文, 繁字體。 中文的特殊字符  中國 (abcd)
3. UNICODE: 32bit 4byte
4. UTF-8: 可變長度的unicode
    英文: 8bit, 1byte
    歐洲文字:16bit, 2byte
    中文: 24bit, 3byte  (abcd)
GBK和UTF-8不能直接互換
轉碼
‘‘‘
# 在python2裏面. 默認的編碼是ASCII
# 在python3中unicode是可以使用的。 默認用的就是Unicode. 代碼用utf-8來存儲

#  如果用unicode存儲, 如果用utf-8
# s = "你好啊"   # 看到的就是unicode
# print(s)

# 1. 編碼. 把unicode轉換成utf-8
# s = "劉偉很皮" # 12個字節
# abc = s.encode("UTF-8")  # encode之後的結果是bytes類型  依然是原來的字符串
# print(abc)  # b‘數據‘

# 解碼
# abc = b‘\xe5\x88\x98\xe4\xbc\x9f\xe5\xbe\x88\xe7\x9a\xaf‘
# s = abc.decode("UTF-8") # 解碼。 用什麽編碼, 就用什麽解碼
# print(s)

# s = "趙瑞鑫"
# print(s.encode("GBK"))
# bs = b‘\xd5\xd4\xc8\xf0\xf6\xce‘
# print(bs.decode("GBK")) # GBK的編碼不能用UTF-8解碼

# GBK的編碼. 把這句話變成UTF-8
# bs = b‘\xd5\xd4\xc8\xf0\xf6\xce‘
# # 先解碼
# s = bs.decode("GBK")
# # 重新編碼
# bs2 = s.encode("UTF-8")
# print(bs2)

  

小學生都能學會的python(小數據池)