第二周 day1:is和==的区别/encode编码/decode解码

1. is 和 == 区别

  id()函数     找内存地址

s = "alex 是 大 xx"
abc = id(s)   # 得到内存地址
print(abc)      #1012479728008
#列表  内存地址不一样
 lst = ["周杰伦", "燃哥"]
 lst1 = ["周杰伦", "燃哥"]
 print(id(lst))  #963277169480
 print(id(lst1))     # 963277169608
#元组  内存地址不一样
 tu = ("燃哥", "周杰伦")
tu1 = ("燃哥", "周杰伦")
print(id(tu), id(tu1))    #836391259016  836391259080

#字典  内存地址不一样
dic = {"a": "b", "c":"d"}
 dic1 = {"a": "b", "c":"d"}
print(id(dic), id(dic1))   #97329761808   97329761880
#字符串   内存地址一样,在小数据池中,会对字符串进行缓存, 为了节省内存
s = "燃哥"
s1 = "燃哥"
print(id(s))    #1012093704832
print(id(s1)     #1012093704832
#int  内存地址一样
a = 10
b = 10
print(id(a), id(b))     #1419144496 1419144496

# 布尔   内存地址一样
a = True
b = True
print(id(a), id(b))     #1418653920 1418653920

  == 判断两边的值

  is 判断内存地址

# == is id
# == 判断. 左右两端是否相等和一致, 比较的是内容
# is 判断. 判断的是内存地址  id()的值来判断    内存地址

#举例1:
lst = ["马化腾", "小威"]
lst2 = ["马化腾", "小威"]
print(lst == lst2)  # True
print(lst is lst2)  # False     列表内存地址不一样

#举例2:
s = "alex"
s2 = "alex"
print(s == s2) # True
print(s is s2)  # True. 字符串有小数据池,内存地址一样

回顾编码:

  1. ASCII: 英文, 特殊字符, 数字, 8bit, 1byte

  2. GBK: 中文 16bit, 2byte. 兼容ASCII

  3. unicode: 万国码, 32bit 4byte. 兼容ASCII

  4. UTF-8: 长度可变的unicode. 英文:8bit, 欧洲:16bit, 中文:24bit 3byte

  python2 只能用ASCII

  python3 有unicode, 默认的编码就是unicode

  内存里用的是unicode. 硬盘和网络传输用的是utf-8或者GBK

2. encode() 编码. 获取到的是编码之后的结果. bytes类型

# 想要存储.必须进行编码
# encode() 编码之后的内容是bytes类型的数据
# 英文:编码之后的结果是英文本身
# 中文:编码之后UTF-8 下. 一个中文3个字节

s="aj马"     #UTF-8下,英文1个字节,保持不变;中文为3个字节
bs = s.encode("UTF-8")   # 把字符串编码成UTF-8的形式
print(bs)    #b'aj\xe9\xa9\xac'
s = ""
print(s.encode("utf-8"))    #b'\xe4\xb8\xad'  UTF-8中中文占3个字节
print(s.encode("GBK"))       # b'\xd6\xd0'   GBK中中文占2个字节

3. decode() 解码. 把bytes编程我们熟悉的字符串

# decode()解码
bs = b'\xb6\xf6\xc1\xcb\xc3\xb4'    # 从别人那里读到的   GBK形式的代码
# 编程人认识的东西 默认转换成unicode,因为python运行的时候编码是unicode形式
s = bs.decode("GBK")    # 解码之后是字符串, 用什么编码就用什么解码
print(s)     #饿了么

4举例,将GBK编码转换成UTF-8

# GBK => UTF-8
bs = b'\xb6\xf6\xc1\xcb\xc3\xb4'
# 先解码成unicode字符串
s = bs.decode("GBK")
# 在把字符串编码成UTF-8
bss = s.encode("UTF-8")
print(bss)      #b'\xe9\xa5\xbf\xe4\xba\x86\xe4\xb9\x88'    bytes类型

猜你喜欢

转载自www.cnblogs.com/mwj-blog1/p/9284546.html