day3----编码-集合-深浅copy-文件操作-函数初识

本文档主要内容:

一 编码

二 集合

三 深浅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-8unicode的一种实现方式,其他还有utf-16utf-32;

它采用变长的编码格式,根据情况,可以使用1-4个字节表示,一般英文字符就用一个字节表示,欧洲语言使用两个字节表示,中文使用三个字节表示.

1.4 gbk: 中国大陆制订的,等同于ucs的新的中文编码扩展国家标准,可以表示简体字和繁体字,兼容gb2312

**下面:Unicodeutf-8gbk,每个编码英文,中文,分别用几个字节表示。

      英文              中文

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') 。反之亦然************************************回到页头************************************************

猜你喜欢

转载自www.cnblogs.com/mmyy-blog/p/9084256.html