-
-
-
二次编码
-
-
编码回顾:
ascii码:最早的编码集,只有数字,字母,特殊符号,不支持中文。
gbk:中文国标码,包含了ASCII编码和中文的常用的编码。
unicode:万国码,包含了所有国家的语言。
utf-8:可变长度的万国码,英文占1个字节(8bit),欧洲文字占两个字节(16bit),亚洲文字占3个字节(24bit)。
编码:
1 s = "葫芦娃" 2 s1 = s.encode("utf-8") # utf-8为编码集 3 print(s1) 4 # 输出结果 5 # b'xe8x91xabxe8x8axa6xe5xa8x83'
解码:
1 s = b'xe8x91xabxe8x8axa6xe5xa8x83' 2 s1 = s.decode("utf-8") 3 print(s1) 4 # 输出结果 5 # 葫芦娃
编码与解码的应用场景:文件操作,网络传输,网络编程。
-
基础数据类型补充
利用for循环删除一个列表:
1 # 错误示例 2 lst = ["大娃", "二娃", "三娃", "四娃", "五娃", "六娃", "七娃"] 3 for i in lst: 4 lst.remove(i) 5 print(lst) 6 # 输出结果 7 # ['二娃', '四娃', '六娃']
那么为什么删不干净呢?因为当第一次循环的时候删除了"大娃",这时候列表中剩余的元素都向前移了一位,for循环第二次的时候,在第二个位置的是"三娃",这时候"三娃"被删除了,后面的以此类推。
1 # 正确方法1 2 lst = ["大娃", "二娃", "三娃", "四娃", "五娃", "六娃", "七娃"] 3 for i in range(len(lst)): 4 lst.pop() 5 print(lst) 6 # 输出结果 7 # []
1 # 正确方法2 2 lst = ["大娃", "二娃", "三娃", "四娃", "五娃", "六娃", "七娃"] 3 ls1 = [] 4 for i in lst: 5 ls1.append(i) 6 for n in ls1: 7 lst.remove(n) 8 print(lst) 9 # 输出结果 10 # []
-
深浅拷贝
浅拷贝:
1 li = [1, 2, 3, 4, [5, 6, 7]] 2 lst = li.copy() 3 print(li) 4 print(lst) 5 # [1, 2, 3, 4, [5, 6, 7]] 6 # [1, 2, 3, 4, [5, 6, 7]] 7 li[-1].append(90) 8 print(li) 9 print(lst) 10 # [1, 2, 3, 4, [5, 6, 7, 90]] 11 # [1, 2, 3, 4, [5, 6, 7, 90]]
为什么我们给li这个列表里边嵌套的列表添加了一个元素后,lst这个列表也变了呢?
下面我们来画图分析一下:
深拷贝:
那么我们怎么样才能让新列表不受原来的列表影响呢?
1 import copy 2 lst = [1, 2, 3, 4, [5, 6, 7]] 3 ls = copy.deepcopy(lst) 4 print(lst) 5 print(ls) 6 # 输出结果 7 # [1, 2, 3, 4, [5, 6, 7]] 8 # [1, 2, 3, 4, [5, 6, 7]] 9 lst.append(90) 10 print(lst) 11 print(ls) 12 # 输出结果 13 # [1, 2, 3, 4, [5, 6, 7], 90] 14 # [1, 2, 3, 4, [5, 6, 7]]
-
is 和 == 的区别
is是判断两边的内存地址是否相等
==是判断两边的值是否相等
-
代码块和小数据池
代码块:
一个文件,模块,类,函数 cmd一行就是一个代码块
python内置,为了节省资源,提高效率
数字: 范围 -5 ~ 256
字符串: 字符串进行乘法的时候总长度不能超过20
小数据池:
python内置
数字: 范围 -5 ~ 256
字符串: 字符串进行乘法的时候总长度不能超过20
在同一文件下,先执行代码块,后执行小数据池