2019-09-17-23:09:48 今天學的內容是有關小數據池的,學的有點懵逼,感覺越來越難學了,但是得堅持下去 明天學習下一個課程時,感覺要跟不上,看來明天得先看好幾遍今天的內容 不然肯定會聽的懵逼 今天看見嗶哩嗶哩很多這樣的視頻,內容和我網上買的一樣的,心塞啊!!!!!!!!!!!! 今天的 ...
2019-09-17-23:09:48
今天學的內容是有關小數據池的,學的有點懵逼,感覺越來越難學了,但是得堅持下去
明天學習下一個課程時,感覺要跟不上,看來明天得先看好幾遍今天的內容
不然肯定會聽的懵逼
今天看見嗶哩嗶哩很多這樣的視頻,內容和我網上買的一樣的,心塞啊!!!!!!!!!!!!
今天的內容:
一.重要知識點
1. is 和 == 區別
id()函數
== 判斷兩邊的值
is 判斷記憶體地址
#小數據池只針對整數、字元串、布爾值.其他的數據類型不存在駐留機制
2.當我們在控制台的時候,代碼塊與代碼塊之間的規則:
1.數字: -5~256之向的整數會被緩存
2.宇符串:
長度小於等於1會預設緩存
長度大於1,如果字元串中只有數字、字母、下換線緩存
乘法得到的字元串:
1.如果乘數是1. 和上面兩個方案一致
2.乘數不是1.最終長度不能超過20
手動指定緩存 from sys import intern intern()制定緩存的內容
3.布爾值
3.py文件里, 一個代碼塊內部,只會緩存int, str, bool 也有自己的小數據池。 緩存的範圍會比外面的代碼塊的數據池大
1. 數字。都會緩存。運算的結果不緩存(-5~256 會緩存)
2. 宇符串。預設的字元串都緩存,如果有乘法。 遵循上方的結論
3. 布爾值,預設緩存
回顧編碼:
1. ASCII: 英文, 特殊字元, 數字, 8bit, 1byte
2. GBK: 中文 16bit, 2byte. 相容ASCII
3. unicode: 萬國碼, 32bit 4byte. 相容ASCII
4. UTF-8: 長度可變的unicode. 英文:8bit, 歐洲:16bit, 中文:24bit 3byte
python2 只能用ASCII
python3 有unicode, 預設的編碼就是unicode
記憶體里用的是unicode. 硬碟和網路傳輸用的是utf-8或者GBK
2. encode() 編碼. 獲取到的是編碼之後的結果. bytes
3. decode() 解碼. 把bytes編程我們熟悉的字元串
二.錯誤總結
1.字元串的錯誤
li=[11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
dict={}
for el in li:
if el<=66:
if dict.get('k1')==None:
dict['k1']=el #-->>這裡是表示字元串(應該加上[])
else:
dict['k1'].append(el) #-->>字元串不可改變
else:
if dict.get('k2')==None:
dict['k2']=el #-->>這裡是表示字元串
else:
dict['k2'].append(el) #-->>字元串不可改變
print(dict)
#出現這個錯誤的原因是因為沒有考慮到字元串是不可變的,沒有連貫上以前學的內容,只以為今天的題目昨天的內容就可以解決
解決方法:加上[],以後每輸入一個命令行,要去考慮它是什麼
2.同上
s="k:1|k1:2|k2:3|k3:4"
lst=[]
lst=s.split("|")
# print(lst)
dict={}
for c in lst:
# print(c)
k,v=c.split(":") #-->>這裡一開始自己做沒有加上k,v
dict[k]=int(v)
print(dict)
#還是一樣沒有考慮到字元串的不可變
解決方法:重新回去再仔細看看前幾天所學的內容,要學會連貫知識點
覺得還可以的代碼
li=[11, 22, 33, 44, 55, 66, 77, 88, 99, 90]
dict={}
for el in li:
if el<=66:
if dict.get('k1')==None:
dict['k1']=[el]
else:
dict['k1'].append(el)
else:
if dict.get('k2')==None:
dict['k2']=[el]
else:
dict['k2'].append(el)
print(dict)