python学习day6 小知识点、编码
python2 python3的一些区别
#python2 print 'abc' #print不需要加括号 range() xrange() 生成器 raw_input() #输入 #python3 print('abc') range() #只有这一个range input()
== 比较值是否相等 is 比较,比较的是内存地址 id(内容)
li1 = [1,2,3] li2 = li1 li3 = li2 print(id(li1),id(li2)) #地址相同
为了节省内存,以下情况下会共用一个内存:
1.小数据池 -5--256
2.字符串,但是中间不能含有特殊字符,s*20之前是同一个地址 s*21以后都是两个地址
i1 = 6 i2 = 6 print(id(i1),id(i2)) #地址相同 i1 = 300 i2 = 300 print(id(i1),id(i2)) #地址不同
list dict tuple set 相同内容的内存都不一样
编码
ascii
A : 00000010 8位 一个字节
unicode
A : 00000000 00000001 00000010 00000100 32位 四个字节
中:00000000 00000001 00000010 00000110 32位 四个字节
utf-8
A : 00100000 8位 一个字节
中 : 00000001 00000010 00000110 24位 三个字节
gbk
A : 00000110 8位 一个字节
中 : 00000010 00000110 16位 两个字节
1,各个编码之间的二进制,是不能互相识别的,会产生乱码。
2,文件的储存,传输,不能是unicode(太大了),只能是utf-8 utf-16 gbk,gb2312,asciid等
py3:
str 在内存中是用unicode编码。
转换成bytes类型可以和文件交流操作
对于英文:
str :表现形式:s = 'alex'
编码方式: 010101010 unicode
bytes :表现形式:s = b'alex'
编码方式: 000101010 utf-8 gbk。。。。
对于中文:
str :表现形式:s = '中国'
编码方式: 010101010 unicode
bytes :表现形式:s = b'x\e91\e91\e01\e21\e31\e32'
编码方式: 000101010 utf-8 gbk。。。。
bytes类型
s = 'alex' s1 = b'alex' print(s,type(s)) #str print(s1,type(s1)) #bytes s = '中国' print(s,type(s)) s1 = b'中国' print(s1,type(s1)) #会报错
如何将str --> bytes
## encode 编码 s1 = 'alex' s11 = s1.encode('utf-8') s11 = 'alex'.encode('gbk') print(s11) s2 = '中国' s22 = s2.encode('utf-8') s22 = s2.encode('gbk') print(s22)
转换
(1) Int与str之间如何转化,转换的结果是什么?有没有条件?
int ---->> str
数字类型变为字符串类型,没有条件,直接用str()
str ----->> int
字符串类型变为数字类型,必须得为纯数字,int()
(2) Int与bool之间如何转化,转换的结果是什么?有没有条件?
int ---->> bool
0为false 其余为True
bool----->> int
false 对应0,True 对应1
(3) str与bool之间如何转化,转换的结果是什么?有没有条件?
str ----->> bool
""时为false,其余都为True
bool ----->> str
True 为字符串True
False 为字符串False
(4) str与list能否转化?如何转化?
str ------>> list
list(str类型)为迭代的字符串列表
list ------>> str
str(list类型)内容不变,类型变为str,可以用strip删除中括号