今天主要学习内容如下:
1.Python2和python3的不同点
# python2 # # print 'shs' # xrange() # raw_input() # # python3 # print('shj') # input() # range()
2.小数据池概念和is与==的不同
# is 比较的是内存地址(即id) # ==比较的是值是否相等 # a = 1 # b = a # print(a == b) # print(id(a) == id(b)) ##数字,字符串 小数据池 #数字的范围 -5 -- 256 #字符串:1,不能有特殊字符 # 2,s*20 还是同一个地址,s*21以后都是两个地址 # # a = 300 # b = 300 # print(a == b) # print(id(a) is id(b)) # print(id(a),id(b)) # a = 'ssgd#d' # b = 'ssgd#d' # print(a is b) #剩下的 list dict tuple set 没有小数据池的概念,都是2个内存地址 a = [1,2] b = [1,2] print(a is b)
3.编码方式
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等)
python3的编码方式
str 在内存中是用unicode编码。
bytes类型
对于英文:
str :表现形式:s = 'alex'
编码方式: 010101010 unicode
bytes :表现形式:s = b'alex'
编码方式: 000101010 utf-8 gbk。。。。
对于中文:
str :表现形式:s = '中国'
编码方式: 010101010 unicode
bytes :表现形式:s = b'x\e91\e91\e01\e21\e31\e32'
编码方式: 000101010 utf-8 gbk。。。。
# # 编码方式python3 # s1 = 'shang' # s2 = b'shang' # print(type(s1),type(s2))#<class 'str'> <class 'bytes'> s1 = '上' # s2 = b'上' # print(type(s1),type(s2)) print(type(s1)) print(s1.encode('gbk')) print(s1.encode('utf-8'))
4.做了2道练习题
# # 1、元素分类 # 有如下值li= [11,22,33,44,55,66,77,88,99,90],将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。 # 即: {'k1': 大于66的所有值列表, 'k2': 小于66的所有值列表} # # dic = {'key1':[],'key2':[]} # li=[11,22,33,44,55,66,77,88,99,90] # for i in li: # if i<=66: # dic['key1'].append(i) # else: # dic['key2'].append(i) # print(dic) # # 2、输出商品列表,用户输入序号,显示用户选中的商品 # 商品 li = ["手机", "电脑", '鼠标垫', '游艇'] # 要求:1:页面显示 序号 + 商品名称,如: # 1 手机 # 2 电脑 # … # 2: 用户输入选择的商品序号,然后打印商品名称 # 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。 # 4:用户输入Q或者q,退出程序。 print('欢迎光临,商品如下') li = ["手机", "电脑", '鼠标垫', '游艇'] s=[] for index,name in enumerate(li): print(str(index) + ' '+name) while 1: num = input('请输入要购买的商品编号:') if num == 'q' or num=='Q': break elif int(num) >= 0 and int(num) <= len(li): s.append(li[int(num)]) for i in s: print('已购买'+' '+i) else: print('输入有误,请重新输入')
5.集合set的增删改查
#集合:可变的数据类型,他里面的元素必须是不可变的数据类型,无序,不重复。 # set = {1,2,3} # set = {1,[1,23]}#TypeError: unhashable type: 'list' # set = {'name','jsh','djdf','jd'} # # #增,删 # set.add('sdd') # print(set) # set.update('sdhhh')#{'jsh', 'h', 's', 'd', 'jd', 'djdf', 'name', 'sdd'} # print(set) # print(set.pop())#随机删除 # print(set.clear()) # print(set) # del set # # print(set) # # set.clear() # # print(set) # # # #集合的交集,并集,反交集,差集 # s1={1,2,3,4,5} # s2={2,3,4,5,6} # print(s1&s2) # print(s1.intersection(s2)) # print(s1|s2) # print(s1.union(s2)) # print(s1^s2) # print(s1.symmetric_difference(s2)) # print(s1-s2) # print(s1.difference((s2))) # print(s1 < s2) # print(s1.issubset(s2)) # 这两个相同,都是说明set1是set2子集。 # # print(s2 > s1) # print(s2.issuperset(s1)) # 这两个相同,都是说明set2是set1超集。 #利用集合去重 li = [1,22,3,34,4,4,5,5,5,7,8] s=set(li) # print(s) # print(list(s)) # frozenset不可变集合,让集合变成不可变类型。 s1=frozenset(s) # print(s1,type(s1)) # for i in s1: # print(i) # # s1.add(5) # # print(s)
6.基础数据类型汇总
# str # s=' ' # print(s.isspace()) # list # li = [1,2,2,3,4,5,6] # # print(len(li)) # # for i in li: # # print(i) # # for i in range(len(li)): # # del li[i] # # print(li.index(5)) # # Python 字典 fromkeys() 函数用于创建一个新字典 # # dic = {'1':'sss','2':'slss','3':'kss','4':'psss'} # dic = dict.fromkeys([1,2,3],'春哥') # print(dic)#{1: '春哥', 2: '春哥', 3: '春哥'} # # # dic = {'1':'sss','2':'slss','3':'kss','4':'psss'} # dic = dict.fromkeys([1,2,3],[]) # dic[1].append(5) # # # # # dic[1]=5 # # # dic[2].extend('ghh6') # # dic[3].extend('ghh6') # print(dic) # # l1 = [] # l2 = l1 # l3 = l1 # l3.append('a') # print(l1,l2,l3) # # # # dic = {'k1':'v1','k2':'v2','a3':'v3'} # # dic1 = {} # # for i in dic: # if 'k' not in i: # # dic1.setdefault(i,dic[i]) # dic1[i]=dic[i] # # dic = dic1 # print(dic) #元祖 如果元祖里面只有一个元素且不加,那此元素是什么类型,就是什么类型。 # tu1 = (1) # tu2 = (1,) # print(tu1,type(tu1))1 <class 'int'> # print(tu2,type(tu2))(1,) <class 'tuple'> #
7.深浅拷贝
#对于赋值运算来说,l1与l2指向的是同一个内存地址,所以他们是完全一样的。 # l1 = [1,2,3,['sf','hdfd']] # l2 = l1 # l1[0] = 11 # print(l1,l2) # #浅拷贝copy。对于浅copy来说,第一层创建的是新的内存地址,而从第二层开始,指向的都是同一个内存地址,所以,对于第二层以及更深的层数来说,保持一致性。 # l1 = [1,2,3,['sf',['hdfd','hh']]] # l2 = l1.copy() # # print(l1,l2,id(l1),id(l2)) # # l1[0] = 11 # # print(l1,l2,id(l1),id(l2)) # # # l1[3][1] = 'dd' # # # print(l1,l2,id(l1),id(l2)) # l1[3][1][0]= 'dd' # print(l1,l2,id(l1),id(l2)) # 深拷贝deepcopy。对于深copy来说,两个是完全独立的,改变任意一个的任何元素(无论多少层),另一个绝对不改变。 import copy l1 = [1,2,3,['sf',['hdfd','hh']]] l2 =copy.deepcopy(l1) # print(l1,l2,id(l1),id(l2)) # l1[0] = 11 # print(l1,l2,id(l1),id(l2)) l1[3][1] = 'dd' print(l1,l2,id(l1),id(l2)) # l1[3][1][0]= 'dd' # print(l1,l2,id(l1),id(l2))
8.文件操作
以什么编码方式储存的文件,就以什么编码打开进行操作。
# f = open(r'c:\users\SZLIB\Desktop\s.txt',mode='r',encoding='utf-8') # content = f.read() # print(content) # f.close() # f = open('dfsfs',mode='r',encoding='utf-8') # content = f.read() # print(content,type(content)) # f.close() # f = open('dfsfs',mode='rb') # content = f.read() # print(content,type(content)) # f.close() # f = open('chun',mode='w',encoding='utf-8') # f.write('dgdgdgd') # f.close() # f = open('ch',mode='w') # f.write('dgdg') # f.close() f = open('un',mode='wb') f.write('dgdd'.encode('utf-8')) f.close()