01昨日内容回顾
dict: dic = {'name':'alex'} 增:dic['age'] = 21 存在就覆盖 dic.setdefault() 没有就增加 删除:pop()按照key删除,有返回值 clear del dic['name'] popitem()随机删除 返回的是元祖 改 update 查 dic.keys() dic.values() dic.items() for k,v in dic.items(): print(k,v) dic.get(key,None)
02作业讲解
# 将所有大于66的值保存到字典的第一个key中,将所有小于66的保存到字典的第二个key中 # 即:{"k1":大于66的所有值的列表,'k2':小于66的所有值的列表} li=[11,22,33,44,55,66,77,88,90] k1=[] #创建一个保存大于66的值空列表 k2=[] dic={} for i in li: if i == 66: continue if i>66: k1.append(i) else: k2.append(i) dic["k1"]=k1 dic["k2"]=k2 print(dic) <<< {'k1': [77, 88, 90], 'k2': [11, 22, 33, 44, 55]}
"""输出商品列表,用户输入序号,显示用户选择的商品。 商品li=["手机","电脑","鼠标垫","游艇"] 要求:1.页面显示序号加商品名称 如:1 手机 2.用户输入选择的商品序号,然后打印商品名称 3.如果用户输入的商品序号有误,提示输入有误,并重新输入 4.用户输入q或者Q退出程序 """ flag = True while flag: li=["手机","电脑","鼠标垫","游艇"] for i in li: # print("%s, %s" %(li.index(i)+1,i)) print("{}, {}".format(li.index(i)+1,i)) a=input("请输入商品序号:") if a.isdigit(): if int(a)>0 and int(a)<len(li): print(li[int(a) - 1]) else: print("请重新输入") elif a.upper()=='Q': break else: print("请输入正确的数字") <<< 1, 手机 2, 电脑 3, 鼠标垫 4, 游艇 请输入商品序号:1 手机 1, 手机 2, 电脑 3, 鼠标垫 4, 游艇 请输入商品序号:
python2 python3 ''' #python2 #print() print 'abc' #range() xrange() 生成器 # raw_input() #python3 #print('abc') #range() # input()
li1 = [1,2,3] li2 = li1 li3 = li2 print(id(li1),id(li2))
代码块的缓存机制的适用范围: int(float),str,bool。
int(float):任何数字在同一代码块下都会复用。
bool:True和False在字典中会以1,0方式存在,并且复用。
大前提:小数据池也是只针对 int(float),str,bool。
小数据池是针对不同代码块之间的缓存机制!!!
代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块。
而作为交互方式输入的每个命令都是一个代码块
如果在同一代码块下,则采用同一代码块下的缓存机制。
如果是不同代码块,则采用小数据池的驻留机制
#数字,字符串 小数据池 #数字的范围 -5 -- 256 #字符串:1,不能有特殊字符 # 2,s*20 还是同一个地址,s*21以后都是两个地址 i1 = 6 i2 = 6 print(id(i1),id(i2)) i1 = 300 i2 = 300 print(id(i1),id(i2)) <<< 1711899107912 1711899107912 140723552564208 140723552564208 1711899334704 1711899334704
# 剩下的 list dict tuple set l1 = [1,] l2 = [1,] print(l1 is l2) s = '中国' print(s,type(s)) s1 = '中国' s1=s1.encode() print(s1,type(s1)) s1 = 'alex' # encode 编码,如何将str --> bytes, () s11 = s1.encode('utf-8') s12 = s1.encode('gbk') print(s11) s2 = '中国' s22 = s2.encode('utf-8') s23 = s2.encode('gbk') print(s22) <<< False 中国 <class 'str'> b'xe4xb8xadxe5x9bxbd' <class 'bytes'> b'alex' b'xe4xb8xadxe5x9bxbd'
03 小知识点总结(以上)
04 编码总结
ascii A : 00000010 8位 一个字节 unicode A : 00000000 00000001 00000010 00000100 32位 四个字节 中:00000000 00000001 00000010 00000110 32位 四个字节 utf-8 A : 00100000 8位 一个字节 中 : 00000001 00000010 00000110 24位 三个字节 gbk A : 00000110 8位 一个字节 中 : 00000010 00000110 16位 两个字节 1,各个编码之间的二进制,是不能互相识别的,会产生乱码。 2,文件的储存,传输,不能是unicode(只能是utf-8 utf-16 gbk,gb2312,asciid等) py3: str 在内存中是用unicode编码。 bytes类型 对于英文: str :表现形式:s = 'alex' 编码方式: 010101010 unicode bytes :表现形式:s = b'alex' 编码方式: 000101010 utf-8 gbk。。。。 对于中文: str :表现形式:s = '中国' 编码方式: 010101010 unicode bytes :表现形式:s = b'xe91e91e01e21e31e32' 编码方式: 000101010 utf-8 gbk。。。。