python之路day06--python2/3小区别,小数据池的概念,编码的进阶str转为bytes类型

python2
#print() print'abc'
#range() xrange()生成器
#raw_input()

python3
# print('abc')
# range()
# input()

= 赋值
== 比较值是否相等
is 比较的是内存地址是否一致,返回True or False
id(内容) 返回内容
li1 =[1,2,3]
li2 =li1 #赋值
print(li1 is li2) #True
print(id(li1),id(li2))#48358464 48358464

小数据池

按数据类型划分
数字,字符串 ————> 小数据池的概念,在一定的范围内,共用一个内存地址,节省内存空间
数字的范围 -5-256
字符串:1/不能含有特殊字符
2/str*20 还是同一个地址,str*21 后都是两个地址
i1 =2
i2 =2
print(id(i1),id(i2)) #1779386016 1779386016

i1 =300
i2 =300
print(id(i1),id(i2)) #58219664 58219664

i1 =300
i2 =i1 #赋值运算地址是一样的
print(id(i1),id(i2)) # 51010704 51010704

剩下的list,dict,tuple,set 都不是一个地址,没有小数据池的概念

编码的进阶 str--bytes 类型

ascii   A:00000010  8位 用一个字节来表示一个字母,字符

unicode A:00000010 00000001 00000010 00000010 32位 4个字节
中:00000010 00000001 00000010 00000010 32位 4个字节
utf-8 : A:00000010 8位 一个字节
中:00000010 00000001 00000010 24位 3个字节

gbk: A: 00000110 8位一个字节
中:00000010 00000110 16位2个字节


1/各个编码之间的二进制,是不能互相识别的,会产生乱码
2/文件的存储,传输,不能是unicode(只能是utff-8,gbk,ascii等)。因为unicode用4个字节表示一个字符,占用空间太大,传输慢。

py3:
文本 str在内存中是用unicdoe编码的。

bytes类型:也是一种数据类型,是一种特殊的。是以(utff-8,gbk,ascii等编码的)
str与bytes 方法都差不多,只是内存中编码不同。

对于英文:
str: 表现形式 s ='alex'
编码方式: 010101010 用的是unicode编码


bytes:表现形式:s = b'alex'
编码形式:010101010 用的是utff-8,gbk,ascii等编码的

ps:

s ='alex'
s1 = b'alex'
print(type(s),type(s1)) #<class 'str'> <class 'bytes'>
对于中文:
str: 表现形式 s ='中国'
编码方式: 010101010 用的是unicode编码


bytes:表现形式:s = b'x\e91\e91\e01\e21\e31\e32' 中文显示不出来,所以不用bytes,用str
编码方式:010101010 用的是utff-8,gbk,ascii等编码的
 
ps:

s ='中国'
s1 = '中国' #python3中bytes类型中文表示不出来。
print(type(s),type(s1)) #<class 'str'> <class 'bytes'>
 
encode编码,如何将str-->bytes类型,方便传输存储
s1 = 'alex'
s11 = s1.encode('utf-8') #可以设置编码方式
print(s11,type(s11)) #b'alex' <class 'bytes'>

s2 = '中国'
s22 = s2.encode('utf-8')
print(s22,type(s22)) #b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'>

 

 
 

 

 

 

猜你喜欢

转载自www.cnblogs.com/hanfe1/p/10277271.html