小数据池

先介绍一些编码:

ascii      不支持中文
gbk        支持中文   2个字节   包含ascii码
unicode    万国码     python3 内存unicode
utf-8      可变的长   英文 1 字节  欧洲2个字节  亚洲3个字节
1 s = '乔狗'
2 a = '乔二狗_sb'
s1 = s.encode('utf-8')       # 编码    编码集
print(s1)      编码        # b'\xe4\xb9\x94\xe7\x8b\x97'
print(s1.decode('utf-8'))   解码  # 乔狗 
a1 = a.encode('utf-8')   
print(a1) # b'\xe4\xb9\x94\xe4\xba\x8c\xe7\x8b\x97_sb'
s2 = s.encode('gbk')
print(s2) # b'\xc7\xc7\xb9\xb7'
a2 = a.encode('gbk')
print(a2) # b'\xc7\xc7\xb6\xfe\xb9\xb7_sb'
s1 = s.encode('utf-8')      # 编码
print(s1.decode('gbk'))      # 解码

列举一个错误的示范
s3 = s.encode('utf-8')
print(s3.decode('gbk')) # 这是一个错误示范,用什么编码,就用什么解码!

   应用场景: 文件操作 网络传输 网络编程

 

   坑1:

1 li = [12,2,3,4,5]
2 for i in li:
3     li.append(i)
4     print(li)
5 print(li)

# 会循环着把列表添加到li中,死循环

   坑2:

1 li = [12,2,3,4,5]
2 for i in li:
3     li.remove(i)
4 print(li)                           # 结果[2,4]
1 for i in li:
2     li.pop()
3 print(li)              # [12, 2]
1 for i in li:
2     del li[-1]
3 print(li)            # [1, 2]

# 不能这样循环的删除列表中的内容,删不干净

正确的操作:

1.

1 for i in range(len(li)):     
2     li.pop()
3 print(li)

2.

li = [1,2,3,4,5]             
li1 = []
for i in li:
    li1.append(i)
for j in li1:
    li.remove(j)
print(li)

# 准备一个空的列表,遍历li列表,把每一个元素添加到li1中

# 遍历li1,用li列表去删除所遍历li1中的内容,这样就能删除干净  

 

1 for i in li:
2     li.clear()                 
3 print(li)

# 偷鸡方法,正式场合不推荐使用

 

删除字典中元素:

1 dic = {'1':22,'2':'22'}
2 lst = []
3 for i in dic:
4     lst.append(i)           # 每个字典的键
5 for j in lst:
6     dic.pop(j)
7 print(dic)

# 通过遍历字典,向列表添加字典的键

# 遍历列表,用字典去删除列表中的键,达到删除字典的效果

 深浅拷贝:

浅拷贝:

1 li = [1,2,3,4]
2 lst = li.copy()
3 print(li)
4 print(lst)

只拷贝表面,深层不考虑

两个id不同

1 li[0] = 56
2 print(li)   #
3 print(lst)  # 不变

列表中第一项改变为56

li此时不再指向1,而是56,所以改变

lst由于拷贝,所指向还是1,所以不改变

 

1 li = [1,2,3,4,[5,6,7]]    # 浅拷贝只拷贝一层元素
2 lst = li.copy()
3 print(li)
4 print(lst)
5 li[-1].append(90)
6 print(li)   #
7 print(lst)  #

li里面的最后一项是可变数据,所以添加一项后,两个列表都改变数据

 深拷贝:

 1 import copy
 2 li = [1,2,3,4,[5,6,7]]
 3 lst = copy.deepcopy(li)   # 深拷贝
 4 # 浅拷贝只拷贝第一层元素,元素是不可变的,就不会变 元素是可变的俩个同时变
 5 print(li)
 6 print(lst)
 7 print(id(li))      # 40289984
 8 print(id(lst))     # 40305368
 9 li[-1].append(90)
10 print(li)   #
11 print(lst)  # 不变

深拷贝:除了表面一样,内在也拷过来

拷贝的内容相当于另开辟了一块空间,所以各种各的,两个列表的指向不同

拓展:
1 li = [1,2]           # li = [1,[1,[1,[1,2]]]]
2 li[1] = li
3 print(li)
4 #  结果 [1, [...]]

每次都会把li这个列表作为第二项,相当于制造了循环

 

   is 和 == 的区别:

==  比较两边的值            
is 比较两边的内存地址
代码块:
代码块机制:
数字: -5 ~ 256
字符串: 乘法的时候总长度不能超过20
代码块 > 小数据
 
 
 
 
posted @ 2019-01-07 20:00  53Dawns  阅读(155)  评论(0编辑  收藏  举报