第八周作业
1. 什么是类型注解并说明其背后的目的。
因为python是动态语言,为了方便阅读代码明确类型而在变量赋值或函数返回值时使用: 类型
的方式进行注解。
如图:
- 注解不会对语法及逻辑造成影响但在pycharm中会进行类型错误的提示。
- 函数注解可以在函数属性__annotations__中查看。
2. 内置的open函数打开文件有几种模式,它们的区别是什么?
r模式
默认模式,只能读取文件。
w模式
写模式,如果文件不存在则创建文件,如果文件存在则清空文件后再写入。
x模式
创建文件并以只写模式打开,如果文件存在则抛出FileExistError异常。
a模式
只写模式打开并追加内容,如果文件不存在则创建文件后写入内容。
b模式
以字符形式打开,默认编码方式取决于平台。
t模式
以字节形式打开。
+模式
为rwxa模式补充缺少的读或写能力。
总结
- r只有读能力,wxa可以写。
- rwxa可以理解为主模式,bt+理解为附加模式,主模式同时只能存在一种,附加模式可以b+或t+,默认值为t。
3. 列出本周讲的几种序列化方法,它们各自的特点是什么?
pickle
- python自带的序列化库,只支持python。
- 将文件序列化为字节对象。
- 支持所有的python类型。
json
- 几乎所有编程语言都支持,应用广泛。
- 将文件序列化为字符对象。
- python对其支持的类型只有如下几个,但也够用。
Python类型 | Json类型 |
---|---|
True | true |
False | false |
None | null |
str | string |
int | integer |
float | float |
list | array |
dict | object |
msgpack
- 可以跨语言通信,轻便效率高。
- 将文件序列化为字节。
4. 有字符串”not 404 found 张三 99 深圳”,使用正则过滤掉英文和数字,最终得到”张三 深圳”
正则匹配:
\b[^\s\d][^\s\d]\b
设定边界只取两个非空白和数字的字符,使用条件有限
[\u4e00-\u9fa5]+
直接匹配汉字
import re
s = 'not 404 found 张三 99 深圳'
#方法一
rest = re.split('\d+|[a-z]+|\s', s) #以数字或英文字母及空白为界定符,得到汉字及若干空字符
print(" ".join(filter(None, rest))) #使用filter过滤空白字符再拼接字符串,使用strip不能去除两组汉字之间的空白字符
#方法二
remain = re.findall('\d+|[a-z]+', s) #找到所有英文及数字
res = [item for item in s.split() if not item in remain] #得到字符串中不在remain里的部分就是汉字
print(" ".join(res))
#方法三
print(" ".join(re.findall('[\u4e00-\u9fa5]+', s)))