一 编码
二 集合
三 深浅copy
四 文件操作
五 函数初识
首先,我们来看看两个字符串的比较
打开cmd,进入dos界面
>>>a='xingchen@'
>>>b='xingchen@'
>>>print(a==b) 结果为 True
>>>print(a is b) 结果为 False
上面的两种结果不一样为什么?
这里我们引入id命令,用来测试内存地址
>>> print(id(a))
2138501550128
>>> print(id(b))
2138501550184 #可以看出内存地址不一样
自此:== 比较的是值,而is比较的是内存地址
进行第二个实验让 a='xingchen' b也是b='xingchen' 结果两个都是True
为什么?
小数据池:在str和int中存在这样一个东西,它叫小数据池,即使存在100个这样的变量,在一定范围内,他们都指向同一个内存地址
存在的意义:节省内存
什么样的范围:对于int -5 ---- 256
对于 str:1 不能含有特殊字符,2 单个元素*int 不能超过21
例如:
>>> i='a'* 20
>>> i1='a' * 20
>>> print(id(i),id(i1))
2138501554296 2138501554296 #这里是一样的
又如:
>>> i='a'* 21
>>> i1='a' * 21
>>> print(id(i),id(i1))
2138501554368 2138501554440 #这里就不一样了
First -------编码
1.1 ascii:包含数字,字母,特殊字符,它只有两种表示形式0和1,八个这样的二进制被称为一个字节(byte),
ascii一共规定了128个字符的编码,这128个字符只占了这个字节的后七位,最前面的一位为0
1.2 unicode:万国码,unicode字符集被简成为ucs。
unicode起初是用两个字节表示一个字符,后来规定一个字符使用的3个或四个字节表示,
这里就产生了问题:无论是简单的英文字符还是复杂的其他字符都用三或四个字节表示,对于存储来说造成了极大浪费,一个中文使用四个字节表示
1.3 utf-8:utf-8是unicode的一种实现方式,其他还有utf-16和utf-32;
它采用变长的编码格式,根据情况,可以使用1-4个字节表示,一般英文字符就用一个字节表示,欧洲语言使用两个字节表示,中文使用三个字节表示.
1.4 gbk: 中国大陆制订的,等同于ucs的新的中文编码扩展国家标准,可以表示简体字和繁体字,兼容gb2312
**下面:Unicode,utf-8,gbk,每个编码英文,中文,分别用几个字节表示。
英文 中文
unicode: 4 4
utf-8: 1 3
gbk: 1 2
其他:
1 不同编码之间的二进制是不能互相识别的
2 对于文件的存储以及传输,不能是unicode的编码(占内存多)。
1.5 bytes和str
在python3.x版本中,有两种类型的字符比较类似
bytes:str拥有的功能,它也有,内部编码方式可以设定,非unicode,可能是utf-8,可能是gbk,可能是gb2312
str(字符串):内部编码方式是unicode,所以不能直接用于文件的存储和传输
str如果要存储: str 转化成--->bytes ---->用于存储和传输
为什么要存在str---因为bytes显示出来的中文没办法识别,只有英文可以,bytes的类型前面有个b,例如b'abcd'
str ---> bytes 使用encode 编码
例如: s1='xingchen'
s2='中文'
b1=s1.encode('utf-8')
b2=s1.encode('gbk')
b3=s2.encode('utf-8')
b4=s2.encode('gbk')
print(b1,b2) --->结果为:b'xingchen' b'xingchen' b1和b2看着结果一样却是不同的编码
print(b3,b4) ----》结果为:b'\xe4\xb8\xad\xe6\x96\x87' b'\xd6\xd0\xce\xc4' 中文就看出区别了
bytes --->str 使用decode 解码
例如:b1.decode('utf-8') b2.decode('gbk')
utf-8要向转化成gbk的编码格式:utf-8首先转化成utf-8的bytes类型,再转化成gdk的bytes类型,如果想转化成str的gdk再使用decode
例如:
例子1:
s='中国' #utf-8的str类型
b=s.encode('gbk') #gbk的bytes类型
c=b.decode('gbk') #转化成str的gbk unicode
print(b) #结果为 b'\xd6\xd0\xb9\xfa'
print(c) #结果为 中国
例子2:
s2='中文'
d=s2.encode('gbk').decode('gbk')
d1=d.encode('gbk') #转化成gbk的bytes类型,查看编码格式
e=s2.encode('utf-8').decode('utf-8')
e1=e.encode('utf-8') #转化成utf-8的bytes类型,查看编码格式
print(d,d1)
print(e,e1)
********************************所以utf-8的str类型转化成gbk的str类型 s.encode('gbk').decode('gbk') 。反之亦然************************************回到页头************************************************