1.字符编码
背景:字符编码因为各国语言不同,所以各国将自己语言编入编码集中会造成混乱,为此诞生出Unicode字符集,但是为了节省空间,后面会转化为“可变长编码”的UTF-8
编码
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:
浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:
所以你看到很多网页的源码上会有类似<meta charset="UTF-8" />
的信息,表示该网页正是用的UTF-8编码。
在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言
2.运用
2.1.ord()函数和chr函数()
对于单个字符的编码有ord()函数,可以实现返回字符串中第一个字符的 *ASCII* 值,chr()则是从指定 *ASCII* 值返回字符*,“注意是单字符,如果输入多字符就返回字符串的第一个字符”
>>> ord('A') 65 >>> ord('中') 20013 >>> chr(66) 'B' >>> chr(25991) '文'
2.2到字节bytes的转换
由于Python的字符串类型是str
,在内存中以Unicode表示,一个字符对应若干个字节。如果要在网络上传输,或者保存到磁盘上,就需要把str
变为以字节为单位的bytes
。
Python对bytes
类型的数据用带b
前缀的单引号或双引号表示:
x = b'ABC'
要注意区分'ABC'
和b'ABC'
,前者是str
,后者虽然内容显示得和前者一样,但bytes
的每个字符都只占用一个字节。
以Unicode表示的str
通过encode()
方法可以编码为指定的bytes
,例如:
>>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87' >>> '中文'.encode('ascii') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
纯英文的str
可以用ASCII
编码为bytes
,内容是一样的,含有中文的str
可以用UTF-8
编码为bytes
。含有中文的str
无法用ASCII
编码,因为中文编码的范围超过了ASCII
编码的范围,Python会报错。
在bytes
中,无法显示为ASCII字符的字节,用\x##
显示。
反过来,如果我们从网络或磁盘上读取了字节流,那么读到的数据就是bytes
。要把bytes
变为str
,就需要用decode()
方法:
>>> b'ABC'.decode('ascii') 'ABC' >>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') '中文'
如果bytes
中包含无法解码的字节,decode()
方法会报错:
>>> b'\xe4\xb8\xad\xff'.decode('utf-8') Traceback (most recent call last): ... UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte
如果bytes
中只有一小部分无效的字节,可以传入errors='ignore'
忽略错误的字节:
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') '中'
2.3.len函数
len()
函数计算的是str
的字符数,如果换成bytes
,len()
函数就计算字节数:
>>> len(b'ABC') 3 >>> len(b'\xe4\xb8\xad\xe6\x96\x87') 6 >>> len('中文'.encode('utf-8')) 6
可见,1个中文字符经过UTF-8编码后通常会占用3个字节,而1个英文字符只占用1个字节。
3.格式转化
常见的占位符有:
占位符 | 替换内容 |
---|---|
%d | 整数 |
%f | 浮点数 |
%s | 字符串 |
%x | 十六进制整数 |
3.1用print()输出,举例:
由图上可以看出格式是print("%d" % 3434.121)输出的就是3434。因为我占位符是整数型%d,后面小数点不输出,但是%.3f是浮点型.3是保留小数点后3位。
注意如果是输出的是两个数则要加上括号(3.23231,3434.121),如果是一个数就不用加上括号print("%d" % 3434.121)。
3.2不用print(),直接输出
>>> 'Age: %s. Gender: %s' % (25, True) 'Age: 25. Gender: True'
这里是后面数字要查在句子的那个位子,占位符%s就放置在哪个位置
3.3单纯的要表达%,
就在前面加上%,就是两个%%,
4.if.....else语句
4.1.if....else在python中由着严密的要求格式
比如:
在if的语句下面的print()必需要空出四个空格(或者直接按tab键)
在else中的下面也是要空出四个空格,代表在同一级
4.2.多分支if....elif....else
可以分别输出多个结果
举例:
a=int(input("please input your numble")) if (a>100) : print("you are big") elif (a<100): print("you are small") else: print("youa are right")
他会根据你的输入有多种输出,这就是多分支的输出,要是还想要更多的分支,就在中间加多少个elif():
print(" ")