自学Python编程的第\七天----------来自苦逼的转行人
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)