一、python2 python3的区别
默认编码:2--ASCII码 3---UTF-8
print:python2 可以不需要加括号(),python3必须加括号
python2中有range,还有xrange--生成器,可转换成range;python3中只有range
python2中的input,raw_input(); python3:input()
二、
1. = 是赋值 == 是比较值是否相等 is也是比较,比较的是内存地址(看是不是一个东西) id(内容) :内存地址
# li1 = [1,2,3] # li2 = li1 # li3 = li2 # print(id(li1),id(li2)) 改变一个,另一个也会改变
2.数字,字符串---小数据池(节省内存)
#数字,字符串 小数据池 #数字的范围 -5 -- 256 #字符串:1,不能有特殊字符 # 2,s*20 还是同一个地址,s*21以后都是两个地址 # i1 = 6 # i2 = 6 # print(id(i1),id(i2)) 一样的 # i1 = 300 # i2 = 300 # print(id(i1),id(i2)) 不一样。pycharm显示一样是其影响,应在终端里操作。
其他的: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等)
utf-8与gbk互相转化,需先转换成Unicode;
py3:
str 在内存中是用unicode编码。 问题:文件不能传输。(文件可理解成大字符串) 需转换成utf-8或gbk方式存储传输。
bytes类型(数据类型的一种,跟字符串很像) 编码方式为utf-8或gbk或gb2312。
所以要将str转为bytes
对于英文:
str :表现形式:s = 'alex'
编码方式: 010101010 unicode
bytes :表现形式:s = b'alex'
编码方式: 000101010 utf-8 gbk。。。。
对于中文:
str :表现形式:s = '中国'
编码方式: 010101010 unicode
bytes :表现形式:s = b'xe91e91e01e21e31e32' 十六进制,人看不懂(三个字节一个中文)若两个字节表示一个中文,则时GBK
编码方式: 000101010 utf-8 gbk。。。。
如何将str转换成bytes类型?
s1 = 'alex' # encode 编码,如何将str --> bytes, () s11 = s1.encode('utf-8') s11 = s1.encode('gbk') print(s11) #b'alex' s2 = '中国' s22 = s2.encode('utf-8') s22 = s2.encode('gbk') print(s22)
s11 = s1.encode('utf-8')