一、bytes类型
Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。
文本总是Unicode,由str类型表示,二i制数据则由bytes类型表示。
Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。
你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然) ,
也不能将字符串传入参数为字节包的函数(反之亦然) 。这是件好事。
字节:可以理解为 2进制 数据类型
在 Python 中有一个 字节数据类型,叫 bytes类型,这个和字符串是两回事
二进制都统一叫 bytes
同一句话之间,字符编码,不同的编码之间可以转换
string → encode编码 → bytes → decode解码 → string
二进制 decode 转换成字符串
什么场景下,字符串 必须转换成 二进制?
Python3 中的数据传输 都是 二进制的形式
>>>'€20'.encode('utf-8')
b'\xe2\x82\xac20'
>>> b'\xe2\x82\xac20'.decode('utf-8')'€20'
encode 的时候,一定要写上,之前的样子,因为它自己不知道,比如之前是 utf-8
b 开头的 就是 二进制的 byte 类型
decode 就转换回来了
msg = "我爱北京天安门"
print(msg)
# print(msg.encode())
如果没有指定编码,就转成默认的编码格式;这地方没出错,是因为 windows 的默认编码 就是 utf-8
这段代码 如果放在 linux 上,可能就报错了
print(msg.encode(encoding="utf-8"))
print(msg.encode(encoding="utf-8").decode(encoding="utf-8"))
这就是把一个字符串 转换成 比特 byte 类型,然后在转换回来
二、三元运算
result = 值1 if 条件 else 值2:
如果条件为真:result = 值1
如果条件为假:result = 值2
三、进制
• 二进制,0 1
• 八进制,01234567
• 十进制,0123456789
• 十六进制,0123456789ABCDEF 二进制到 16 进制转换http:/jingyan.baidu.com/album/47a29124292608c0142399b.html?picindex=1
a,b,c = 1,3,5
d = a if a >b else c
如果 a >b 结果就是 a; 如果 a 不大于 b 结果就是 c
>>> d = a if a<b else c
>>> d
1
>>>
这就叫三元映射
如果不用三元映射,只能这样写;就会变得比较麻烦
>>> if a >b: d = a
... else:d=c
二进制与十六进制数之间的对应关系表
16进制与二进制对应关系
0 1 2 3 4
0000 0001 0010 0011 0100
5 6 7 8 9
0101 0110 0111 1000 1001
A B C D E F
1010 1011 1100 1101 1110 1111
二进制转换成十六进制的方法是,取四合一法,即从二进制的小数点为分界点,向左(或向右)每四位取成一位。
1011 1001 1011. 1001
每四位表示一个 16 位
组分好后,对照二进制与十六进制数的对应表,将四位二进制按权相加,得到的数就是一位十六进制数,
然后按顺序排列,小数点的位置不变哦,最后得到的就是十六进制数哦。
1011 1001 1011. 1001
B 9 B 9
注意 16 进制的表示法,用字母 H 后缀表示,比如 BH 就表示 16 进制数 11;
也可以用 0X 前缀表示,比如 0X23 就是 16 进制的 23
BH H 后缀
0X53 0X 前缀
在向左(或向右)取四位时,取到最高位(最低位)如果无法凑足四位,就可以在小数点的最左边(或最右边)补0,进行换算
10111.011
1 0111 .011
↓ ↓ ↓
0001 0111 0110
↓ ↓ ↓
1 7 6