一. is 和 == 的区别
小数据池 数字小数据池的范围 -5 ~ 256 字符串中如果有特殊字符他们的内存地址就不一样 字符串中单个*20以内他们的内存地址一样,单个*21以上内存地址不一致
a = 'alex@'a1 = 'alex@'print(a is a1) # Falesn = 5//2n1 = 2print(n is n1) #Truea = 'a'*21b = 'a'*21print(a is b)a = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'b = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'print(a is b)n = -6n1 = -6print(n is n1) #Falsen = -5n1 = -5print(n is n1) #Truen = 257n1 = 257print(n is n1) #True
总结: == 比较 比较的俩边的值 is 比较 比较的是内存地址 id()
二. 编码和解码
ascii 码: 不支持 中文 支持 英文 数字 符号 8位 一个字节 gbk码 国标: 支持 中文,英文,数字,符号 英文 16位 二个字节 中文 16位 二个字节 unicode 万国码 支持 中文,英文,数字,符号 英文 32 位 四个字节 中文 32位 四个字节 utf-8 长度可变的万国码 最少用8位 英文 8位 一个字节 中文 24位 三个字节
Python3中 程序运行阶段 使用的是unicode 显示所有的内容 bytes类型 传输和存储都是使用bytes pycharm 存储的时候默认是使用utf-8
1 s = 'alex' 2 print(s.encode('utf-8')) # 编码 encode('utf-8') utf-8 是指定要编码成什么样的编码类型 3 print(s1.decode('utf-8')) # 4 bytes 5 b'alex' 6 7 s = '饿了' 8 s1 = s.encode('gbk') #b'饿了吗' #b'\xe9\xa5\xbf\xe4\xba\x86\xe5\x90\x97' 9 print(s.encode('gbk')) #b'\xb6\xf6\xc1\xcb\xc2\xf0'10 print(s1)11 print(s1.decode('utf-8'))
总结: is 和 == 区别 is 比较内存地址 id() ---- 获取内存地址 小数据池: 数字的小数据池范围是 -5 ~ 256 字符串: 字符串中不能包含特殊符号 + - * / @ 等等 字符串单个字符*20以内内存地址都是一样的,单个字符*21以上内存地址不一致 注意: pycharm是个坑, 一个py文件中所有相同的字符串 一般都是使用一样的内存地址 == 比较俩边的值 编码和解码 encode(编码方式) ---- 拿到明文编码后对应的字节 decode(编码方式) -----将编码后的字节解码成对应的明文 注意: 用什么进行编码就要什么进行解码 不然后会懵逼!