测试题(笔试,不能上机哦~):
0. 你知道 Python 基于序列的三大容器类指的是什么吗?
答:列表、字典、set集合
1. Python 允许我们自己定制容器,如果你想要定制一个不可变的容器(像 String),你就不能定义什么方法?
答:setitem、delitem方法
2. 如果希望定制的容器支持 reversed() 内置函数,那么你应该定义什么方法?
答:reversed方法
3. 既然是容器,必然要提供能够查询“容量”的方法,那么请问需要定义什么方法呢?
答:len方法
4. 通过定义哪些方法使得容器支持读、写和删除的操作?
答:getitem、setitem、delitem方法
5. 为什么小甲鱼说“在 Python 中的协议就显得不那么正式”?
答:可以自定义,所以显得不正式
动动手(一定要自己动手试试哦~):
0. 根据课堂上的例子,定制一个列表,同样要求记录列表中每个元素被访问的次数。这一次我们希望定制的列表功能更加全面一些,比如支持 append()、pop()、extend() 原生列表所拥有的方法。你应该如何修改呢?
要求1:实现获取、设置和删除一个元素的行为(删除一个元素的时候对应的计数器也会被删除)
要求2:增加 counter(index) 方法,返回 index 参数所指定的元素记录的访问次数
要求3:实现 append()、pop()、remove()、insert()、clear() 和 reverse() 方法(重写这些方法的时候注意考虑计数器的对应改变)
今天只有一道动动手的题目,但在写代码的时候要时刻考虑到你的列表增加了计数器功能,所以请务必要考虑周全再提交答案。
附课堂上的例子:
- class CountList:
- def __init__(self, *args):
- self.values = [x for x in args]
- self.count = {}.fromkeys(range(len(self.values)), 0)
- def __len__(self):
- return len(self.values)
- def __getitem__(self, key):
- self.count[key] += 1
- return self.values[key]
本讲总结: