1. is 和 == 的区别
1. is 判断内存地址 # id()函数-----获取内存地址
a = 'alex' # 字符串 print(id(a)) # 2917013018360 内存地址 n = 10 # 数字 print(id(n)) # 140713995195712 li = [1,2,3] # 列表 print(id(li)) # 1504954376776 a = 'alex' # 字符串 b = 'alex' print(a is b) # Ture n = 10 # 数字 n1 = 10 print(n is n1) # Ture
# 小数据池(常量池): 把我们使用过的值存储在小数据池中,供其他的变量使用 # 小数据池给数字和字符串使用,其他数据类型不存在 (1)数字小数据池的范围 -5~ 256, 超过这个范围, 内存地址就不一样. (2)字符串中如果有特殊字符他们的内存地址就不一样 (3)字符串中单个*20以内他们的内存地址一样,单个*21以上内存地址不一样. # 数字 n = -6 n1 = -6 print(n is n1) # Flase n = 257 n1 = 257 print(n is n1) # Flase n = 5 // 2 n1 = 2 print(n is n1) # Ture # 字符串 a = 'alex@' a1 = 'aelx@' print(a is a1) # Flase a = 'a' * 22 b = 'a' * 22 print(a is b) # Flase # 布尔值 a = True b = True print(a is b) # Ture # 列表,元组和字典没有小数据池 li = [1,2,3] # 列表 li2 = [1,2,3] print(li = li2) # False tu = ('燃哥','周杰伦') # 元组 tu1 = ('燃哥','周杰伦') print(tu is tu1) # False dic1 = {'name':'alex'} # 字典 dic = {'name':'alex'} print(dic1 is dic) # False
2. == 比较 比较是值 a = 'alex' # 字符串 b = 'alex' print(a == b) # Ture n = 10 # 数字 n1 = 10 print(n == n1) # Ture li1 = [1,2,3] # 列表 li2 = [1,2,3] print(li1 == li2) # Ture dic1 = {'name':'alex'} # 字典 dic = {'name':'alex'} print(dic1 == dic) # Ture
# 总结 == 比较 比较的两边的值 is 比较 比较的是内存地址 id()
2. 回顾编码
1. ASCII: 不支持 中文 支持 英文 数字 符号 8位 一个字节 2. GBK 国标:(兼容ASCII) 支持 中文,英文,数字,符号 英文 16位 两个字节 中文 16位 两个字节 3. unicode:(兼容ASCII) 支持 中文,英文,数字,符号 英文 32位 四个字节 中文 32位 四个字节 4. UTF-8: 长度可变的unicode. 最少用8位 英文 8位 一个字节 中文 24位 三个字节 python2 只能用ASCII python3中 程序运行阶段 使用的是unicode 显示所有的内容 bytes类型, 传输和存储都是使用bytes. pycharm 存储的时候默认是是使用utf-8
3. 编码和解码
1. encode(编码方式) 编码. 获取到的是编码后对应的字节(解码之后的结果是bytes 'b') s = 'alex' print(s.encode('utf-8')) # b'alex'
2. decode(解码方式) 解码. 将编码后的字节编码成对应的明文(把 bytes变回字符串)
s = '饿了'
s1 = s.encode('gbk') '
print(s1) # b'xb6xf6xc1xcb'
print(s1.decode('gbk')) # 饿了
注意: 用什么进行编码就要用什么进行解码 不然会懵逼