编码转换,基础补充,深浅拷贝,id is == ,代码块(了解),小数据池(了解)

1.编码转换:

  ASCII:最早的编码

  GBK:中文国标码,包含了ASCII编码.

  UNICODE:万国码,包含了ASCII

  utf-8:可变纬度的万国码,是unicode的一种实现

综上:除了ASCII码以外,其他信息不能直接转换.

  unicode是万国码,什么内容都可以进行显示,那么数据传输和存储的时候由于unicode比较浪费空间和资源.需要把unicode转存成utf-8或者GBK进行存储.

  在python中的转换过程:

    把文字信息进行编码,编码之后的内容就可以进行传输了.编码之后的数据是bytes类型的数据.

数据还是原来的,只是表现形式发生了变化.

  bytes的表现形式:

    1. 英文: b' alex' 英文的表现形式和字符串没什么两样

    2.中文:  b'xe4xb8xad' 这是一个汉字的utf-8的bytes表现形式

 英文的编码:

s = "alex"
print(s.encode("utf-8"))
print(s.encode("GBK"))
结果:

b'alex'
b'alex'

 中文的编码:

s = "猪蹄"
print(s.encode("utf-8"))
print(s.encode("GBK"))
结果:

b'xe7x8cxaaxe8xb9x84'
b'xd6xedxccxe3'

 ####英文的编码之后的结果和原字符串一样,中文的编码之后的结果根据编码的不同,结果也不同

编码和解码:

  编码和解码的时候必须都需要一样的格式.

  

s = "zz"
s1 = s.encode("GBK")
s2 = s1.decode("utf-8")
print(s2)
结果:
zz

2.基础数据类型补充

lst = [1,2,3,4,5,6]
for i in lst:
    lst.append(7) # 这样写法就会一直持续添加7
    print(lst)
print(lst)

列表:循环删除列表中的每一个元素

li = [ 11,22, 33, 44]
for i in li:
    li.remove(i)
print(li)
结果:
[22, 44]

for运行过程中,循环进行到下标[0]也就是11时,remove i 也就是删除掉11,后面的元素自动向前挪一位,下标变成减一,再次循环是是下标[1]的元素33此时remove删除的就是33.

正确的做法:

li = [11, 22, 33, 44]
for i in range(len(li)):
    li.pop()
print(li)
结果:
[]

由于删除元素会改变元素的索引,所以容易出问题,尽量不要在循环中直接删除元素,可以吧要删除的元素放到另一个集合再进行批量删除 

dict中的fromkey(),可以帮我们通过list来创建一个list:

dic = dict.fromkeys(["周杰伦","马化腾"],["jj","gg"])
print(dic)
结果:
{'周杰伦': ['jj', 'gg'], '马化腾': ['jj', 'gg']}

dict.fromkIeys第一个是指的字典的键,第二个指的是字典的值.

dic = {'k1': 'alex', 'k2': 'wusir', 's1': '金老板'}
dic_del_list = []
for i in dic:
    if 'k' in i:
        dic_del_list.append(k)
for el in dic_del_list:
    del dic[el]
print(dic)

 字典中的元素在迭代过程中是不允许进行删除的

要把要删除的元素暂时保存到第二个list中,然后循环list,再删除

类型转换:

       元组 => 列表 list(tuple)

  列表 => 元组 tuple(list)

  list=>str str.join(list)

  str=>list str.split()

  转换成False的数据:

   0,'',None,[],(),{},set() ==> False 

 深浅拷贝:

浅拷贝:只会拷贝第一层,第二层的内容不会拷贝.

深拷贝:把元素内部的元素完全进行拷贝复制. 不会产其中一个个改变另一个跟着改变的问题

   

原文地址:https://www.cnblogs.com/shicongcong0910/p/10219299.html