数据在计算机内的存储以及编码格式
- 8bit为1字节,1bit是1位二进制
- ASCII码一个字符一字节
- Unicode一个字符2字节
- 字母字符的ASCII码和Unicode码之间的关系是:ASCII码前直接加八位0就得到了它的Uincode码,但是如果大部分字符都是英文,unicode比ASCII浪费了将近一倍的字符,所以诞生了UTF-8编码
- UTF-8编码是可变编码,能把一个Unicode字符根据不同的数字大小编码为1-6个字节,英文字母一般为1个字节,汉字通常为3个字节,生僻字符更长。同时ASCII编码可以被看作是UTF-8编码的一部分
python中的字符
- 在python中,提供一对函数
-
- ord()由字符获取字符的整数表示
- chr()由字符的整数表示获取对应的字符
- 同时字符也可用十六进制直接表示
字符串与字节串Bytes
- 字符串在内存中一Unicode表示,一个字符对应若干个字节。但是如果在网络上传输,或者保存到磁盘中需要把str类型转换为bytes类型
- bytes类型的数据使用带b前缀的引号表示,如:b“abc”
- 使用encode()可以将str编码为指定的bytes,如:“中文”.encode('UTF-8')
- 使用decode()可以将bytes解码为str,如:b“abc”.decode("ascii")
- 如果bytes中包含无法解码的字节,decode()方法会报错,如果bytes中只有一小部分无效的字节,可以传入errors='ignore'忽略错误的字节:b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore')
- 使用len()可以计算str包含的字符数量,如果传入的是bytes,得到是字节数
字符串的格式化
传统传参方式
%传参
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
->'Hi, Michael, you have $1000000.'
- %d,整数
- %s,字符型
- %f,浮点型
- %s,十六进制整数
其中,格式化整数和浮点数还可以控制精度
可以使用辅助符号"m"
print('%2d-%02d' % (3, 1)) -> 3-01
print('%.2f' % 3.1415926) -> 3.14
如果整数位数不够2位,%2d使用空格填充,%02d使用0填充。如果小数的位数大于两位,%2f保留2位小数。
- 如果字符串中只是想单纯的加入%,则使用%%
- %s可以把任意数据类型转化为字符串
传统传参方式
format格式化传参赋值
>>> 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
->'Hello, 小明, 成绩提升了 17.1%'
其中,{0},{1}表示传参的占位符的索引:用于指示规范格式的开始.1f表示保留一位小数
传统传参方式
最后一种格式化字符串的方法是使用以f开头的字符串,称之为f-string,它和普通字符串不同之处在于,字符串如果包含{xxx},就会以对应的变量替换:
>>> r = 2.5
>>> s = 3.14 * r ** 2
>>> print(f'The area of a circle with radius {r} is {s:.2f}')
->The area of a circle with radius 2.5 is 19.62
上述代码中,{r}被变量r的值替换,{s:.2f}被变量s的值替换,并且:后面的.2f指定了格式化参数(即保留两位小数),因此,{s:.2f}的替换结果是19.62。