Python之路Day6

今日大纲
1.is == id
2.编码


1.is == id
(1)id 查询内存地址
name = "alex"
print(id(name))
print(id(3))

(2)= 赋值运算 == 比较运算
name1 = "alex"
name2 = "alex"
print(name1 == name2)
(3)is 判断内存地址是否相等
name1 = "alex"
name2 = "alex"
print(name1 is name2)

(4)小数据池
int/str数据类型在一定范围内,如果两个数据值相等,为节省内存,共用一个内存地址。
int:[-5,256]
str:1)有非字母元素和数字元素以外,就不是小数据池。
    2)单个字母* int(20及以内)存在小数据池。


2 编码二
2.1 编码一复习
ASCII: 一个字符 1个字节表示(8位),数字字母特殊字符。

unicode:万国码
一个字符用四个字节表示》
A:0000 0001 0000 0001 0000 0001 0000 0001
中:0000 0001 0000 0001 0000 1001 0000 0001

utf-8:
a: 0000 0001
欧洲:0000 0001 0100 0001
亚洲:0000 0001 0000 0001 1100 0001

gbk:国标
a:0001 0001
中:0000 0001 0000 0001

2.2 文件的传输
1)不同的密码本之间的二进制是不能互相识别的,容易报错或者产生乱码。
2)计算机的文件存储和传输都是0101010(gbk,utf-8,ascii,gb2312等)不能是unicode(资源浪费)。



2.3 大前提:python3x,编码。
数据类型:
int
str
bytes :str 拥有的所有方法,bytes都有。如:s1 = b"alex"
print(s1.capitalize())
bool
list
tuple
dict
set
问:既然有str,那为什么存在bytes?
答:文件的存储、传输,是非Unicode,而python3中str的编码方式是Unicode;str不能直接传输;
2.4 python3x 内存中的编码方式是unicode
英文:
str: 表现形式 name = "alex"
内部编码:unicode


bytes:表现形式:name1 = b"alex"
内部编码:非unicode

name = "alex"
name1 = b"alex" #bytes,英文能直接看懂
print(name,type(name))
print(name1,type(name1))

中文:
str: 表现形式 name = "中国"
内部编码:unicode

bytes:表现形式:b'\xe4\xb8\xad\xe5\x9b\xbd' #中文直接看不出结果
内部编码:非unicode

(1)str ---> bytes

b1 = "中国".encode("gbk") #编码:gbk编码
print(b1,type(b1)) #结果:b'\xd6\xd0\xb9\xfa' <class 'bytes'>
b2 = "美国".encode("utf-8")#编码:utf-8编码
print(b2,type(b2)) #结果:b'\xe7\xbe\x8e\xe5\x9b\xbd' <class 'bytes'>

(2)bytes ---> str

s1 = b1.decode("gbk") #解码 :原字符串以什么编码方式编码,解码要用同样的方式
print(s1,type(s1)) #结果:中国 <class 'str'>
s2 = b2.decode("utf-8") #以utf-8的形式解码
print(s2,type(s2)) #结果:美国 <class 'str'>

(3)utf-8 bytes  ---> gbk bytes

s = "中国"
b1 = s.encode("utf-8")    #创建一个utf-8 bytes
print(b1,type(b1))        #结果:b'\xe4\xb8\xad\xe5\x9b\xbd' <class 'bytes'>
s1 = b1.decode("utf-8")  #用utf-8的方式解码成str
s2 = s1.encode("gbk")    #对str以gbk的方式编码成 gbk bytes
print(s2,type(s2))       # 结果:b'\xd6\xd0\xb9\xfa' <class 'bytes'>

(4)gbk bytes ---> utf-8 bytes

s = "美国"
b1 = s.encode("gbk") #创建一个 gbk bytes
print(b1,type(b1))   #结果:b'\xc3\xc0\xb9\xfa' <class 'bytes'>
s1 = b1.decode("gbk") #用gbk形式解码成str
b2 = s1.encode("utf-8") #对str用utf-8的编码成utf-8 bytes
print(b2,type(b2))#结果:b'\xe7\xbe\x8e\xe5\x9b\xbd' <class 'bytes'>

 

posted on 2018-05-06 11:29  Y易然R  阅读(98)  评论(0)    收藏  举报

导航