is和==的区别以及编码和解码

一.is和==的区别

python中对象包含的三个基本要素分别是:id(身份标识),type(数据类型),value(值)

is和==都是对对象进行比较判断的,但对对象比较判断的内容不同.

★==是python标准操作符中的比较操作符,用来判断两个对象的value是否相等.

如: 

1 a=6/2
2 b=3
3 print(a==b)       #True

★is也被叫做同一性运算符,这个运算符比较判断的是对象的身份标识(id)是否相同,

如:

1 x=[4,5,6]
2 y=[4,5,6]
3 print(x is y)    #False 因为x和y的id不同
 1 a=1        #a和b是int型
 2 b=1
 3 print(a is b)   #True
 4 print(id(a))     #1659989008
 5 print(id(b))       #1659989008
 6 
 7 a='qwert'      #a和b是字符串型
 8 b='qwert'
 9 print(a is b)      #True
10 print(id(a))         #1685772424112
11 print(id(b))         #1685772424112
12 
13 a=(1,2,3,4)       #a和b是元组类型
14 b=(1,2,3,4)
15 print(a is b)     #False
16 print(id(a))      #2761455024344
17 print(id(b))      #2761455024312
18 
19 a=[1,2,3,4]      #a和b是列表类型
20 b=[1,2,3,4]
21 print(a is b)     #False
22 print(id(a))      #2127026092936
23 print(id(b))      #2127026092948
24 
25 a= {'a':1,'b':2}     #a和b是字典类型
26 b={'a':1,'b':2}
27 print(a is b)     #False
28 print(id(a))      #2398891769216
29 print(id(b))      #2398891769288

is只有int和str类型的情况下,a is b才是True,其他类型时,a是False.

同时在int和str类型的时候也有一些限制

int型小数据池的范围是:-5~256

字符串中如果有特殊字符,他们的内存地址就不一样

字符串中单个字符*20以内,他们的内存地址是一样的,*21以上,就不一样

二.编码和解码

        字符串在Python内部的表示是Unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符解码(decode)成unicode,再从unicode编码(encode)成另一种编码。

decode('码')     字节  ==>  明文     把括号中的原码转换成unicode中明文

encode('码')     明文  ==>  字节     把unicode中的明文转换成括号中的原码 

 

1 a=("移花接木你肌瘤")             #unicode下的明文
2 print(a.encode('gbk'))         #把unicode下的明文转换成了gbk下的原码    b'\xd2\xc6\xbb\xa8\xbd\xd3\xc4\xbe\xc4\xe3\xbc\xa1\xc1\xf6'
3 a1=a.encode('gbk')
4 print(a1.decode('gbk'))        #把gbk下的原码转换成了unicode下的明文    移花接木你肌瘤
5 a2=a1.decode('gbk')
6 print(a2.encode('utf-8'))      #把unicode下的明文转换成了utf-8下的原码  b'\xe7\xa7\xbb\xe8\x8a\xb1\xe6\x8e\xa5\xe6\x9c\xa8\xe4\xbd\xa0\xe8\x82\x8c\xe7\x98\xa4'
7 a3=a2.encode('utf-8')
8 print(a3.decode('utf-8'))      #把utf-8下的原码转换成了unicode下的明文  移花接木你肌瘤

 

posted @ 2018-08-02 16:13  ★行者尚★  阅读(516)  评论(0编辑  收藏  举报