python2 python3的一些区别
#python2print 'abc' #print不需要加括号range() xrange() 生成器raw_input() #输入#python3print('abc')range() #只有这一个rangeinput()
== 比较值是否相等 is 比较,比较的是内存地址 id(内容)
li1 = [1,2,3]li2 = li1li3 = li2print(id(li1),id(li2)) #地址相同
为了节省内存,以下情况下会共用一个内存:
1.小数据池 -5--256
2.字符串,但是中间不能含有特殊字符,s*20之前是同一个地址 s*21以后都是两个地址
i1 = 6i2 = 6print(id(i1),id(i2)) #地址相同i1 = 300i2 = 300print(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)) #strprint(s1,type(s1)) #bytess = '中国'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删除中括号